第2章 变量和基本类型

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++语言中关于作用域的规则。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容