C++11规定,可以将变量声明为constexpr,用于编译器在编译阶段来验证变量的值是不是常量表达式。
因此,constexpr修饰的变量必须用常量or常量表达式来初始化。到目前为止,算数类型、指针、引用都可以定义为constexpr,而Io、自定义类、string等不可以。
constexpr int i = 20; //正确,20是常量表达式 constexpr int i2 = i + 1; //正确,i+1是常量表达式 constexpr int i3 = size(); //只有size()的返回值类型是constexpr,才正确 constexpr string s1 = ""; //错误
int i = 0; const int j = 0; int main() {
int m = 0; static int n = 0; constexpr int *p = 0; //正确 constexpr int *p1 = nullptr; //正确 constexpr int *p2 = &i; //正确,i是全局变量,地址固定 constexpr int *p3 = &j;//错误,constexpr是顶层const,而j是const类型。应该是const int *p3 = &j; constexpr int *p4 = &m; //错误,m是局部变量,地址不固定 constexpr int *p5 = &n; //正确,n的地址固定 return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210699.html原文链接:https://javaforall.net
