- 如果表达式里既有带符号烈性又有无符号类型,当带符号取值为负时会出现异常结果,如果 int a= -1, b= 1; a*b显然为-1 ,但 int a; unsigned int b; 则结果须视在当前机器上int所占位数而定
- 使用未初始化变量的值时一种错误的变成行为并且很难调试。建议初始化每一个内置类型的变量
- 对于命名规范来说,若能坚持,必将有效
- 一般来说在对象第一次被使用的地方附近定义它是一种好的选择,这样做有助于更容易找到变量的定义。更重要的是,当变量的定义与它第一次被使用的地方很近时,我们会赋给它一个比较合理的初始值
- 引用必须被初始化。int &refval; //wrong
- 引用并非对象,它只是为一个已经存在的对象所起的另外一个名字
- 引用类型的初始值必须是一个对象。 int &refval = 10; //wrong
- 引用类型的初始值必须相同 double dval =3.14; int &rafval5 = dval ;// wrong
- 得到空指针最直接的方法就是用字面值nllptr来初始化指针
- 建议初始化所有指针
- 指针和引用都能提供对其他对象的间接访问
- pi = &val; 赋值永远改变的时等号左侧的对象。
- void * 是一种特殊的指针类型,可用于存放任意对象的地址
- // i是一个int 型的数据,p是一个int型的指针,r是一个int型引用
int i = 1024; *p = &i; &r = i; - const对象必须初始化
- constexpr指针的初始值必须是nullptr或者0,或者存储于某个固定地址中的对象
- 类型别名 typedef
typedef double wages;
typedef wages base; - 别名声明
using SI = Sales_item;
SI item; - 可以使用decltype(*beg)来获取此表达式的类型
- 所有迭代器操作都不会生成元素,只能生成元素的引用
- 左值:一个变量或一个返回引用类型的表达式
2021-1-19
3.5.5
现代的c++程序应当尽量使用vector和迭代器,避免使用内置数组和指针。应该尽量使用string,避免使用C风格的基于数组的字符串。
3.6.1
int *ip[4]; //整型指针的数组
int (*ip)[4]; //指向含有4个整数的数组
C++ 11新标准提出,通过使用atuo或者decltype就尽可能避免再数组前面加上一个指针类型了
4.11
double slope = static_cast<double>(j) / i;
强烈建议程序员避免使用强制类型转换。
6.2.2
如果函数无须改变引用形参的值,最好将其声明为常量引用
6.4
f(int, int);
f(double, double);
对于f(42, 2.56); 针对第一个参数 与 f(int, int) 更匹配;针对第二个参数 与 f(double, double) 更匹配;
编译器最终将以此调用具有二义性而拒绝其请求。
调用重载函数时应尽量避免强制类型转换。