经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
C++基础 const
来源:cnblogs  作者:还想抢救抢救  时间:2018/10/15 9:27:03  对本文有异议

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。

  1. int a = 1;
  2. int b = 2;
  3. int c[a + b];
  4. 上面这种定义是错误的(gcc除外)。
  5. const int a = 1;
  6. const int b = 2;
  7. int c[a + b];
  8. 这样在C++中是正确的。
  9. 原因是当 C++ 编译器扫描到
  10. const int a = 1;
  11. const int b = 2;
  12. 会将 a ,b 放到 符号表中。
  13. 当扫描到 int c[a + b];
  14. 会直接将 a,b从符号表中替换,
  15. 也成了 int c[1 + 2];
  16. 所以 #define const C++中类似。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号