c++ const 数据成员

17 篇文章 0 订阅

c++ const  数据成员


const修饰的成员常量,该常量的内存地址是分在常量区。如果该成员常量的值被确定是在对象呗构造之后。也即是说该常量是属于某一个对象的。

而static修饰的静态变量也是存放在静态存储区。他是属于一个类的,并不是专属于某一个对象。而且这个值是可以改变的。该值的初始化是在编译阶段就完成的。

在一个值得注意的小点就是,const成员变量的初始化,一概在构造函数的初始化列表里面而不是在构造函数体内。而且是占用内存的。



现在的一个问题是static const修饰的成员常量存放在什么地方。理解肯定是,该常量属于类共有的,并且不可以改变。

网上讨论比较多的是该常量的定义能不能在头文件内。

这个问题要取决于你的编译器的版本。早起的编译器是不允许你在类声明里面初始化的。

现在版本的大都是支持的。

编译器不支持也是可以理解的,对于static变量来说必须是在类外声明的。

而const变量在定义的时候就必须初始化。而且static不属于某一个具体的类。

所以这就很好理解了。编译器不支持是一种严格的书法检查。


这本来就不符合代码书写规范。定义还是放在  .c 文件比较好。




const 常量的内存分配问题  (基本类型)


如果你定义了一个全局的常量,

const  int  constant = 3333333;


不分配内存

如果只是将这个constant赋值给其他变量,这个constant是不占用内存的。这就像是宏定义一样。但是比宏定义安全,因为有类型检查。


分配内存

1  const成员变量,这个在上面已经说了。

2  extern const int constant = 3333;   如果你在一个文件里面定义了一个常量,它是内部可见的,在别的文件内不能像是使用全局变量一样使用。

                                                                     要想在其他文件内使用,必须显示的声明为extern。这样声明后,为该常量分配内存空间。

3  const int constant  = 3333;

    const int * pconstant = &constant  ;


常量是不能在声明之后在进行定义的







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值