constexpr

常量表达式是指值不会改变并且在编译过程就能是到计算结果的表达式。
一个对象是不是常量表达式由它的数据类型和初始值共同决定

int fun(){return 32; }
int main(int argc, char* argv[]) {
const int max_files = 20;
const int limit = max_files + 1;
constexpr int cexp_m = max_files + 1;
int i=0;
cout << "input i:" << endl;
cin >> i;
const int ci = i+1;
cout << "ci:" << ci < constexpr int cei = ci+1;
//constexpr int cei = fun();
return 0;
}
上例中,max_files, limit, cexp_m都是常量表达式,但cei会编译出错,原因是因为ci并不是常量表达式,const对象不代表为constexpr
C++11允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。
声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化
用普通函数初始化会报编译错误;但可以用constexpr函数去初始化constexpr变量
【constexpr】constexpr函数的返回值可以不是常量,但返回值必须为常量表达式

    推荐阅读