博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++基础 const
阅读量:5288 次
发布时间:2019-06-14

本文共 775 字,大约阅读时间需要 2 分钟。

1. C中的const

  C中const变量只是只读变量,有自己存储空间。可能被存放在 栈、堆、数据段,所以可以修改。

2. C++中const

  可能分配空间,也可能不分配空间。

  当 const 为全局时,并且需要在其他文件中使用,或当使用 & 操作符取 const 常量的地址时,会分配空间。

3. C++中const 和 #define 的联系

   (1)C++编译器堆const常量的处理

      当碰见常量声明时,在符号表中放入常量。

      编译过程中若发现使用常量则直接以符号表中的值替换

      编译过程中若发现对const修饰的常量使用了 extern 或者 & 操作符,则给对应的常量分配存储空间。

    (2)const 和 #define 的区别

       const 是在编译阶段处理, #define 是在预编译处理,

       const 有作用域,类型检查。 #define 只是纯粹的文本替换,作用域从定义开始直到文末或 #undef。

int a = 1;    int b = 2;    int c[a + b];    上面这种定义是错误的(gcc除外)。        const int a = 1;    const int b = 2;    int c[a + b];    这样在C++中是正确的。    原因是当 C++ 编译器扫描到    const int a = 1;    const int b = 2;    会将 a ,b 放到 符号表中。    当扫描到 int c[a + b];    会直接将 a,b从符号表中替换,    也成了 int c[1 + 2];    所以 #define 和 const 在 C++中类似。

转载于:https://www.cnblogs.com/yangxinrui/p/9782378.html

你可能感兴趣的文章
[JZOJ6278] 2019.8.5【NOIP提高组A】跳房子
查看>>
[JZOJ6257] 【省选模拟8.9】修路
查看>>
NOI2019网络同步赛总结
查看>>
[JZOJ3690] 【CF418D】Big Problems for Organizers
查看>>
[JZOJ2866] 【集训队互测 2012】Bomb
查看>>
[JZOJ6279] 2019.8.5【NOIP提高组A】优美序列
查看>>
[JZOJ3691] 【CF414E】Mashmokh's Designed tree
查看>>
[JZOJ1904] 【2010集训队出题】拯救Protoss的故乡
查看>>
[JZOJ6344] 【NOIP2019模拟2019.9.7】Huge Counting
查看>>
[JZOJ6258] 【省选模拟8.9】轰炸
查看>>
6358. 【NOIP2019模拟2019.9.15】小ω的仙人掌
查看>>
[JZOJ3692] 【SRM 611】ElephantDrinking
查看>>
6361. 【NOIP2019模拟2019.9.18】鲳数
查看>>
[JZOJ6347] 【NOIP2019模拟2019.9.8】ZYB玩字符串
查看>>
6367. 【NOIP2019模拟2019.9.25】工厂
查看>>
析合树
查看>>
[JZOJ6359] 【NOIP2019模拟2019.9.15】小ω的树
查看>>
6362. 【NOIP2019模拟2019.9.18】数星星
查看>>
5433. 【NOIP2017提高A组集训10.28】图
查看>>
6368. 【NOIP2019模拟2019.9.25】质树
查看>>