《Effective Modern C++》学习笔记之条款十五:只要有可能使用constexpr,就使用它

constexpr变量必须使用一个具有const属性,且在编译阶段就已知的值对其初始化。例如:

int x = 0;
const int y = x;   //可以使用x对cosnt变量初始化
const int z = 0;   

constexpr int arraySize = x;  //错误,x为运行期间才确定值的变量
constexpr int arraySize = y;  //错误,y为运行期间才确定值的变量

constexpr int arraySize = z;  //正确,z为const变量,且编译期间就已知
constexpr int arraySize = 11;  //正确,11为const变量,且编译期间就已知

对于constexpr函数,在调用时,将根据传入参数的型别,有不同的结果:

  • 如果传入的参数都是constexpr变量,则函数返回值也是constexpr变量
  • 如果传入的参数有一个或多个不是constexpr变量,则其和普通函数无差别

要点速记

  • constexpr变量具备const属性,且必须由编译器已知的值完成初始化。
  • constexpr函数在调用时,若传入的实参值都是编译期已知的,则返回的结果也是constexpr变量,否则返回非constexpr变量
  • 比起非constexpr变量或constexpr函数而言,constexpr函数或constexpr变量可以用在一个作用域更广的语境中

猜你喜欢

转载自blog.csdn.net/Chiang2018/article/details/114242449