zoukankan      html  css  js  c++  java
  • 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;
    } }
  • 相关阅读:
    b_lc_长度为 3 的不同回文子序列(统计两个相同字符中间有多少个不同字符)
    b_lc_最小未被占据椅子的编号(记录每个时间来的人 + pq)
    b_lc_统计好数字的数量(排列数+组合数+快速幂)
    TreeMap
    LinkedHashMap
    HashMap的总结
    HashMap
    Collection
    Map
    LinkedList学习
  • 原文地址:https://www.cnblogs.com/y4247464/p/13932513.html
Copyright © 2011-2022 走看看