*以下都是在c++版本库下,有些问题在c指针中已经介绍,这里不在重复了***
1.endl是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新于设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。
2.C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。
3.定义长整型的时候应该使用字母大写L,小写字母l很容易与数值1混淆。
4.两个相邻的仅有空格、制表符或换行符分开的字符串字面值,可连接成一个新字符字面值。这使得多行书写长字符串字面值变得简单。
5.处理长字符串有一个更基本的方法,这个方法依赖于很少使用的程序格式化特性:在一行的末尾加一反斜线符号可将此行和下一行当做同一行处理
6.左值:左值可以出现在赋值语句的左边和右边。 右值:右值只能出现在赋值的右边,不能出现在赋值语句的左边。
7.C++支持两种初始化变量的形式: 复制初始化和直接初始化。复制初始化语法用等号 (=),直接初始化则是把初始化放在括号中。直接初始化语法更灵活且效率更高。
8.任何在多个文件中使用的变量都需要有定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明。
9.通常把一个对象定义在它首次使用的地方是一个很好的方法。在对象第一次被使用的地方定义对象可以提高程序的可读性。
10.引用是一种复合类型,通过在变量名前添加&符合来定义。复合类型是指用其他类型定义的类型。在引用的情况下,每一种引用都关联到某一其他类型。不能定义引用类型的引用,但可以定义任何其他类型的引用。当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。
11.const引用可以初始化为不同类型的对象或者初始化为右值。非const引用只能绑定到与该引用同类型的对象。
int i=42 ;
const int &r = 42;
const int &r2 = r+ i;
这是合法的
但
int i=42 ;
int &r = 42;
int &r2 = r+ i;
就是非法的
非const引用只能绑定到与该引用同类型的对象。
const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。
12. 用clsss和struct关键字定义类的唯一差别在于默认访问级别。默认情况下,struct的成员为public,而class的成员为private
13.extern int val = 10;虽然val声明为extern 但是它有初始化式,代表这条语句是一个定义。
14.头文件用于声明而不是用于定义。当设计头文件时,切记定义和声明的区别是很重要的。定义只可以出现一次,而声明则可以出现多次。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。但有三个例外:头文件可以定义类、值在编译时就已知道的const对象和inline函数。在头文件中定义这些实体,是因为编译器需要它们的定义(不只是声明)来产生。一些const 对象定义在头文件中。因为const对象默认为定义它的文件的局部变量,所以把他们的定义放在头文件中是合法的。这种行为有一个很重要的含义,当我们在头文件中定义了const变量后,每个包含该文件的源文件都有了自己的const变量,其名称和值都一样。但实践中不会有任何存储空间用于存储用常量表达式的初始化的const变量。
15. 数组的维数必须用大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量不能用于定义数组的维数。(但在c语言中是错误的,c语言中数组维数必须是常量,而const只是只读的变量)
16.把int型变量赋给指针是非法的,尽管此int型变量的值肯能为0.但允许把数值0或在编译时可获得0值的const量赋给指针。
17.typedef string *pstring;
const pstring cstr;
该声明语句应该是把cstr定义指向string类型对象的const指针,这个定义等价于 string *const cstr;
18