欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++基础 const

程序员文章站 2022-03-18 16:37:56
1. C中的const C中const变量只是只读变量,有自己存储空间。可能被存放在 栈、堆、数据段,所以可以修改。 2. C++中const 可能分配空间,也可能不分配空间。 当 const 为全局时,并且需要在其他文件中使用,或当使用 & 操作符取 const 常量的地址时,会分配空间。 3. ......

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