1. 如果数值超过了int的范围,用long long;在算数表达式中不要使用char 或 bool;执行浮点运算用double
2. 当一个算数表达式中既有无符号数又有int时,那个int值将转换成无符号数。切勿混用带符号类型和无符号类型
3.对象初始化值:列表初始化;string规定如果没有指定初值则生成一个空串;建议初始化每一个内置类型的变量
4. 如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量;变量能且只能被定义一次,但可以被声明多次
5. C++是一种静态类型语言,即标识符需要先声明再使用
6. 当你第一次使用变量时,再定义它,定义尽量靠近使用的地方。
7. 引用必须被初始化,因为引用无法重新绑定到另一个对象;引用不是对象,因此不能定义引用的引用
8. 指针的值应属下列4种状态之一:
1)指向一个对象
2)指向紧邻对象所占空间的下一个位置
3)空指针,意味着指针没有指向任何对象
4)无效指针,也就是上述情况之外其他值
9. 现在的C++程序最好使用nullptr,尽量避免使用NULL
10. void *是一种特殊的指针类型,可以存放任意对象的地址
11. 面对一条比较复杂的指针或引用的声明语句时,从右向左阅读有助于弄清楚真实含义。
12. const对象必须初始化
const int i = get_size();//运行时初始化
const int j = 42; //编译时初始化
13. constexpr 变量:由编译器验证变量是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。
constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int sz = size();//只有size()是一个constexpr函数时,才是一条正确的声明语句。
14. typedef 与using 用于类型别名:
typedef double wages;
typedef wages base, *p;
using SI = Sales_item;
15. auto类型说明符:用它可以让编译器为我们分析变量的类型
const int ci = 0;
auto &g = ci;//g是一个整形常量引用
auto &h = 42;//错误:不能为非常量引用绑定字面值
const auto &j = 42;//正确:可以为常量引用绑定字面值
15. decltype
编译器分析表达式的类型,但不实际计算表达式的值
decltype(f()) sum = x; //sum的类型就是函数f的返回类型
const int ci = 0, &cj = ci;
decltype(ci) x = 0;//x的类型时const int
decltype(cj) y = x;//y的类型时 const int &
decltype(cj) z;//错误:z是一个引用,必须初始化
int i = 42, *p = &i, &r = i;
decltype(r+0) b;//正确:加法结果是int,因此b是一个int
decltype(*p) c;//错误:c是int &,必须初始化
因为r是引用,因此decltype(r)的结果是引用类型
如果表达式的内容是解引用,则decltype将得到引用类型
decltype(*p)的结果就是int &, 而非int
decltype((variable)) 双层括号的结果永远是引用,而decltype(variable)的结果是variable的类型。
变量加上括号相当于表达式。
16. 类通常定义在头文件中,且头文件名字与类名相同
17. 预处理变量无视C++语言中关于作用域的规则。