新增类型
long long
C++11标准中新加入了long long类型属性,占用空间不小于long类型。
long large = LONG_MAX;
long long long_large = LLONG_MAX;
long long long_long_large = 1LL << 63;
cout<<"test long long:"<<large<<'\t'<<long_large<<'\t'<<long_long_large<<endl;
测试结果显示long long与long类型均为64bit。
nullptr字面量
新增这个关键字用来初始化一个空指针,可以用来转换为其他任何类型的指针,这个关键字用来替代以前的字面值0
和NULL
两种初始化空指针的方式。
类型相关
auto类型推断
auto关键字,可以让编译器帮我们分析表达式的类型,类似模版形参推断。
需要注意的是:
- 使用auto定义的变量必须有初始值,不然无法进行类型推断
- 在同一条语句中使用auto定义的变量,其基础类型必须一致
double val1 = 1.1, val2 = 2.2;
auto sum = val1 + val2;
auto val3 = 0.3, *p = &val3;
double val6 = 1.6, &rval6 = val6;
auto aval6 = rval6;
aval6 = 6.0; // aval6 is not a reference.
- 顶层const,指的是当前的数据类型本身是常量,如double,int或者相关的指针本身是常量
- 底层const,指的是如指针、引用等复合类型,其所指向的数据类型是常量
auto在进行类型推断时,一般会忽略顶层const(top-level const),而保留底层const(low-level const)。如果想要保留顶层const,则必须显式的在auto前添加const指示符。
const int ci = 1, &cr = ci;
auto b = ci; //b是一个整数,忽略顶层const
auto c = cr; //c是int类型,cr是ci的别名,具有的顶层const忽略了
auto d = &ci; //d是一个指向整形常量的指针
auto &e = ci; //e是一个绑定到ci整形常量的引用
const auto &f = 12; //f是一个整形常量引用,绑定到常量字母量,auto &g = 12是错误的
decltype声明类型
decltype(expr)可以获得expr表达式对应的类型,并且不会对expr具体求值。