C++基础 const

2018-10-13 06:27:25来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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++中类似。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Visual C++中error spawning cl.exe错误的两种解决方法.

下一篇:C++ 基础 引用