C++入门--constexptr

看一个例子:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 #define LEN 10
 6 
 7 int len_foo() {
 8     return 5;
 9 }
10 
11 int main() {
12     char arr_1[10];
13     char arr_2[LEN];
14     int len = 5;
15     char arr_3[len]; //error
16 
17     return 0;
18 }

时期:

1、编译器  cpp -- 编译器 -- exe

2、运行期 双击exe, exe被执行的时期

len是在栈上开辟空间的局部变量,是在编译期间分配的

但是编译器在程序运行期间才能确定该变量的大小(可能被改变),导致arr_3数组的大小不确定。因此有矛盾

可以使用  Const 修饰来避免这个问题:

const int len = 5;

char arr_3[len];   //在编译期间就确定大小,在不允许len在运行期间被改变

在看一个例子:

...
const int len_foo() {
    return 5;
}

int main() {
    char arr_1[10];
    char arr_2[LEN];
    const int len = 5;
    char arr_3[len];

    char arr_5[len_foo() + 5];  //error -- 表达式的计算结果不是常数

    return 0;
}
...

编译器仍然认为该表达式不是常量表达式,只是常量的加后的值;

因此引入 constexptr  常量表达式

constexptr int len_foo() {
    return 5;
}

注意:常量表达式内不支持 if -- else 语句

error:

const int len_foo() {
  if(1) { return 5;
} }

 

posted @ 2020-11-05 16:39  朱果果  阅读(808)  评论(0编辑  收藏  举报