constexpr 和 常量表达式

constexpr修饰的类型必须是常亮表达式,也就是常数,否则报错,这样编译器在编译阶段就可以判断出变量是否为常量。

  1. const int i = 0;
  2. const int j = 1;
  3. constexpr int k = i + j + 10; //编译器会验证通过
  4. const double cd = 3.14;
  5. double e = 2.7;
  6. constexpr double x = e + cd; //编译器不会验证通过

auto 类型

auto 会自动为变量设定一个类型,这个类型是编译器判断的,而且很有合理性。

  1. int i = 0;
  2. auto j = i;//j为int类型

decltype 辨析类型

decltype会分析括号内的类型,并将其作为一种自己的类型给变量定义

  1. int i;
  2. decltype(i) j; //j为int类型

而且它定义的类型必须是符合规则的,比如说引用类型必须初始化。
如果加上括号,则是一种引用。