C++ static const 修饰成员

3 篇文章 0 订阅

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。

<pre name="code" class="cpp">class Test
{
public:
	Test() : a(0) {}
	enum { size1 = 100, size2 = 200 };
private:
	const int a;  // 只能在构造函数初始化列表中初始化,这个似乎很少用到???
	static int b; // 不能赋值,初始化!!!!
	const static int c; // 与static const int c;相同;可以在这里声明并定义赋值 c=0 (以便在此类的声明里被用到,如定义数组时需要长度int常量,但不是所有编译器都支持在这里初始化,有些支持,这些支持的[可能]要求你在实现文件中定义一次如“const int Test::c;”(设初值了); 如果不支持,在定义数长度时,可以用enum来代替常量int).
};
int Test::b = 0;  //不能以成员列表初始化,不能在声明处初始化,因为不属于某个对象。
const int Test::c = 0;//注意:给静态成员变量赋值时,不能加static修饰。但const要加。
 
 

总结:

1. 只有const 则一定只能在初始化列表或者构造函数中初始化

2.只有static 则只能在函数体声明之外初始化

3.const与static同在,那变量在【类声明处(即头文件)---要编译器支持,如vs支持在此初始化】和 【函数体外(或实现文件)但是不能加static修饰)都可以初始化,但是不能在初始化列表初始化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值