一 无符合类型
一般情况下不要在同一个表达式中混用无符号和带符号类型,计算时带符号类型会转化为无符号类型。例如
unsigned int a = 5;
if(-1>a) ; //为真
二 指针与引用
指针“指向”内存中的某个对象,引用“绑定到”内存中的某个对象。
指针本身即为一个对象,引用不是一个对象,且仅允许一次绑定。
指针不必赋初值,引用必须赋初值。
三 const
const对象必须初始化
顶层const,表示一个常量或常量指针;底层const,表示它们所指(或所引用)的对象是常量。
在执行拷贝操作时.顶层操作不收影响,因为拷贝操作不会改变被拷贝对象的值。底层const则不同,拷入或拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型能够进行转化。
const int v = 0;
int *p1 = nullptr;
const int *p2 = &v;
p1 = p2; //非法,令p1指向p2所指的内容,有可能错误地改变常量的值。
auto 一般会忽略掉顶层const,留下底层const。
四 decltype
declype 使用的如果是一个不加括号的变量,则得到的是该变量的类型;如果加了一层或多层括号,就会被当成表达式,从而推断得到引用类型。