类范围常量:const vs static const

时间:2015-04-16 19:36:16

标签: c++

对于类的常量,我应该使用类范围static const,还是文件范围const?

例如:

// .h
class C {
  private:
    static const int some_constant_c;
}

// .cc
const C::some_constant_c = 10;

VS

// .h
class C {
}

// .cc
const some_constant_c = 10;

对我来说,前者具有更好的语义,即常量属于某个类,但后者具有不将常量暴露给头文件的优点。

==============

关于此的一个跟进问题:

如果我希望子类访问我的常量怎么办?将static const放入protected有意义吗?示例如下:

// .h
class C {
  protected:
    static const int some_constant_c;
}

2 个答案:

答案 0 :(得分:4)

当然,这是个人偏好的问题。试图不在头文件中公开类内部是一个在C ++中最明确航行的船......在成员变量和私有成员函数之间,将实现细节保留在标题之外是不切实际的(除非你& #39;重新使用pImpl习语。

如果您只想隐藏常量的,请注意您可以将初始化程序放在源文件中。

如果在源文件中将常量实现为全局变量,请使用匿名命名空间来防止它们导致链接器冲突。

答案 1 :(得分:2)

如果第一种情况中的const是私有的,我更喜欢第二种变体。

为什么要用冗余信息污染类声明? 考虑一下,您正在实现一个具有许多常量的协议解析器。课堂宣言如何?

另一个问题是,为什么要两次输入const的名称?我尽量保持定义和初始化。

只是一个意见。