0、赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数
1、赋给符号类型一个超出它表示范围的值时,结果是初始值的原码保留符号类型的有效位作为补码,求该补码的原码
2、初始化是创建变量时赋予一个初始值,赋值是把对象的当前值擦除,而以一个新值来替代
3、int a{12}; 为列表初始化,不允许丢失信息的列表初始化 int a{12.5};
4、定义于任何函数体之外的变量被初始化为0
5、声明i, extern int i; 定义j,extern int j = 0;
6、变量的const特征仅仅在执行改变其操作是才会发挥作用,所以常量可以赋值给非常量
7、const对象仅在文件内有效,想在多个文件共享const对象,必须在变量的定义之前添加extern关键字
8、对const的引用可能引用一个并非const的对象。 int i = 0; const int &ri = i;
9、顶层const表示指针本身是个常量,底层const表示指针所指的对象是一个常量
10、常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。const int i = get_size(); i不是常量表达式
11、函数体内定义的变量一般来说并非存放在固定地址中,因此constexpr指针不能指向这样的变量(C++11)
12、声明为constexpr的变量必须用常量表达式初始化。 constexpr int sz = size(); 只有当size是一个constexpr函数时才正确
13、在constexpr声明中如果定义了一个指针,constexpr仅对指针有效,与指针所指的对象无关。constexpr const int *p = nullptr;
14、定义类型别名的方法:使用关键字typedef;使用别名声明 using 别名 = 类型
15、typedef char *pstring; const pstring cstr = 0; 不等同于 const char *cstr; 前者是指向char的常量指针,后者是指向const char的指针
16、如果表达式的内容是解引用操作,则decltype将得到引用类型。int i = 1, *p = &i; decltype(*p) c = i; c是int&,必须初始化(C++11)
17、如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,则得到的结果是该变量的引用类型。 int i = 0; decltype(i) a; decltype((i)) b = i; a是int,b是int&。