1.布尔(bool)的取值是真(true)或者假(false),最小尺寸未定义。
2.一个bool型的算术值赋给bool型时,初始值为0则结果为false,否则都为true。
3.一个浮点数赋给整数类型时,结果值将仅保留浮点数中小数点以前的部位。
4.赋给无符号类型一个超过它表示范围的值时,结果是初始值对无符号类型表示值总数取模后的余数。例如,8比特大小的unsigned char 可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char 所得的结果是255。
5.赋给带符号类型一个超出它表示范围的值时,结果是未定义的。此时。程序可能继续工作、可能崩溃,也可能生成垃圾数据。
6.当在程序的某处使用了一种算术类型的值而其实所需的是另一种类型的值时,编译器同样会执行上述的类型转换。
7.十进制字面值的类型是int、long和long long中尺寸最小的那个,当然前提是这种类型要能容纳下当前的值。八进制和十六进制字面值的类型是能容纳其数值的int、unsigned int、long、long long和unsigned long long 中的尺寸最小者。如果一个字面值连与之关联的最大的数据都放不下,将产生错误。
8.尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。如果我们使用了一个形如-42的负十进制字面值,那个符号并不在字面值之内,它的作用仅仅是对字面值取负值而已。
9.编译器在每个字符串的结尾处添加一个空字符('\0'),因此,字符串字面值的实际长度要比它的内容多1。
10.如果两个字符串字面值位置紧邻且仅由空格。缩进和换行符分隔,则它们实际上是一个整体。当书写的字符串字面值比较长,写在一行里不太合适时,就可以采取分开书写的方式:
//分多行书写的字符串字面值
std::cout<< "a really,really long string literal "
" that spans two lines "<<std::endl;
11.初始化的不同形式: int i=0; int i={0}; int i{0}; int i(0);
12.C++为支持分离式编译机制,讲声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含那个名字的声明。而定义负责创建与名字关联的实体。
如果想声明一个变量而不要定义它,就在变量名前添加关键字extern.而且不要显式地初始化变量:
extern int i; // 声明i而非定义 i
int j; //声明并定义 j包含了
任何显式初始化的声明即成为定义。我们能给由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成定义:
extern double pi=3.1416 //定义
13.变量能且只能被定义一次,但是可以被多次声明。
14.C++的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头。标识符的长度没有限制,但是对大小写字母敏感。
15.变量命名有许多约定俗成的规范,下面的这些规范能有效提高程序的可读性:
*标识符要能体现实际含义。
*变量名一般用小写字母。
*用户自定义的类名一般以大写字母开头。
*如果标识符由多个单词组成,则单词间应有明显区分,如 student_loan或studentLoan,不要使用studentloan。
16.同一个名字在不同的作用域中可能指向不同的实体。名字的有效区始于名字的声明语句,以声明语句所在的作用域末端为结束。
17.名字main定义于所有花括号之外,它和其他大多数定义在函数体之外的名字一样拥有全局作用域。一旦声明之后,全局作用域内的名字在整个程序的范围之内都可使用。
18.作用域能彼此包含,被包含(或者被嵌套)的作用域称为内层作用域,包含着别的作用域的作用域被称为外层作用域。
19.新建局部变量在其作用域能可以暂时覆盖同名全局变量,这时想访问全局同名变量可用格式为 ::变量名
20.引用即为对象另起一个名字,通过将声明符写成&d的形式定义引用类型。特点如下:
*引用定义必须初始化
*引用定义后即与其对象绑定到一块,不可再重新赋值。
21.指针:
*指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象
*指针无须再定义时赋初值
*指针可以指向变量地址,但是不能指向变量的引用。因为引用不是对象,没有实际地址,所以不能定义指向引用的指针
*访问无效指针的后果无法预计,因此程序员必须清除任意给定的指针是否有效
22.
刘磊是逗逼