const expression常量表达式,指值不会改变,并且在编译过程中就能得到计算结果的表达式。
复杂系统难以分辨一个初始值是否是常量表达式,因此提出constexptr以提示编译器,用来验证变量值是否是常量表达式。
constexpr int myadd(int x, int y){ //constexpr函数应足够简单,以使得编译期就可以计算出结果 return x+y; } int main(void){ int x = 3, y = 4; constexpr int a = myadd(2,3); //正确,因为函数实参是常量表达式 //constexpr int a = myadd(x,y); //错误,实参非常量无法在编译期间确定 //constexpr int a = x+y; //错误,x+y的值要在具体运行时才得到 const int b = x + y; //正确,但不是常量表达式 std::cout<<a<<" "<<b<<std::endl;
int array[] = {1,2,3}; constexpr int soa = sizeof(array); //正确,sizeof()是c++操作符,可以在编译期给出结果 std::cout<<sizeof(array)<<" "<<soa<<std::endl;
}
其他相关知识点:
1. sizeof()返回一个对象或类型所占的内存字节数
2. array就是{1,2,3}所占内存地址的别名,(数组与指针的区别)
参考:
[1] c++ primer P58, P214