constexpr 和 常量表达式
constexpr修饰的类型必须是常亮表达式,也就是常数,否则报错,这样编译器在编译阶段就可以判断出变量是否为常量。
const int i = 0;
const int j = 1;
constexpr int k = i + j + 10; //编译器会验证通过
const double cd = 3.14;
double e = 2.7;
constexpr double x = e + cd; //编译器不会验证通过
auto 类型
auto 会自动为变量设定一个类型,这个类型是编译器判断的,而且很有合理性。
int i = 0;
auto j = i;//j为int类型
decltype 辨析类型
decltype会分析括号内的类型,并将其作为一种自己的类型给变量定义
int i;
decltype(i) j; //j为int类型
而且它定义的类型必须是符合规则的,比如说引用类型必须初始化。
如果加上括号,则是一种引用。