类作用域常量:常量与静态常量
Class scope constants: const vs static const
对于类的常量,我应该使用类范围静态常量还是文件作用域常量?
例如:
// .h
class C {
private:
static const int some_constant_c;
}
// .cc
const C::some_constant_c = 10;
与。
// .h
class C {
}
// .cc
const some_constant_c = 10;
对我来说,前者具有更好的语义含义,即常量属于某个类,但后者的优点是不会将常量暴露给头文件。
====
==========关于这个问题的一个后续问题:
如果我希望我的常量被子类访问怎么办。把static const
放在protected
有意义吗?示例如下:
// .h
class C {
protected:
static const int some_constant_c;
}
当然,这是个人喜好的问题。尽量不在头文件中公开类内部是一艘绝对在C++航行的船......在成员变量和私有成员函数之间,将实现详细信息排除在标头之外是不切实际的(除非您使用的是 pImpl 惯用语)。
如果您只想隐藏常量的值,请注意,您可以改为将初始值设定项放在源文件中。
如果确实将常量实现为源文件中的全局变量,请使用匿名命名空间来防止它们导致链接器冲突。
我更喜欢第二个变体,前提是第一种情况下的常量是私有的。
为什么要用冗余信息污染类声明?考虑一下,您正在实现一个协议解析器,其中包含许多常量。类声明将是什么样子的?
另一个问题是,为什么要键入两次常量的名称?我尽量保持定义和初始化
。只是一个意见。
相关文章:
- 常量静态成员函数
- 常量静态成员函数:有另一种方法可用吗?
- C++常量静态字符* 数组
- 为什么常量静态变量应该在结构中初始化?
- 使用 constexpr 初始化非常量静态字符串
- 初始化常量静态 std::map unique_ptr作为值
- 静态函数常量静态成员函数
- 不能将值 120 分配给静态常量无符号字符或将值 200 分配给常量静态无符号 int
- 静态常量与常量静态
- 声明"静态常量"和"常量静态"有什么区别
- 常量静态成员初始化 - 类定义内部与外部类定义
- 为什么一个非常量静态成员会有多个定义
- 在类内部使用常量-静态与非静态
- 模板/泛型类中的非常量静态成员- c++与c#
- 类中的常量静态函数指针~如何初始化它
- 无法访问常量静态标准::映射枚举结构
- C++初始化非常量静态成员变量
- When是一个非静态常量数据成员,比常量静态成员更有用
- C++11 MinGW 4.9.1 shared_ptr和常量静态类字段结果"Undefined reference"
- c++动态初始化常量静态向量