C/C++编程:static成员初始化

1059 篇文章 275 订阅

一个static类成员是静态分配的,而不是每个类对象的一部分。一般来说,static成员声明充当类外定义的声明,比如:

class Node{
	static int node_count;  //声明
};

int Node::node_count = 0;  // 定义

但是,在很少的情况下,在类内声明中初始化static成员也是有可能的。条件是static成员必须是整数或者枚举类型的const,或者字面值类型的constexpr,而且初始化器必须是一个常量表达式。比如:

class Curious{
public:
	static const int c1 = 7;   //正确
	static int c2 = 11;        //错误,非const
	const int c3 = 12;         //正确,但是非static。 const必须声明时并定义
	static const int c4 = sqrt(9); //错误,类内初始化器不是常量
	static const float c5 = 7.0;   //错误,类内初始化器不是整形(应该使用constexpr而不是const)
};

当且仅当你使用一个已初始化成员的方式要求它像对象一个在内存中存储时,该成员必须在某处唯一定义。初始化器不能重载:

const int Curious::c1 ;  //ok,  不重复初始化器
const int Curious::c1 = 22;  //错误,不重复初始化器
const int p = &Curious::c1 ;  //ok,  Curious::c1已经被定义了

成员常量的主要用途是为类声明中其他地方用到的 常量提供符号名称:

template<class T, int N>
class Fixed{
public:
	static constexpr int max = N;
private:
	T a[max];
};

对于整数,枚举值提供了另一种在类声明中定义符号常量的方法:

class X{
	enum {c1 = 7, c2 = 11, c3 = 13};
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值