问题描述
- 根据https://google.github.io/styleguide/cppguide.html#Variable_Names,类的数据成员,无论是静态的还是非静态的,都像普通的非成员变量一样命名,但带有下划线。
- 根据https://google.github.io/styleguide/cppguide.html#Constant_Names,“声明为constexpr 或const 的变量,其值在程序运行期间是固定的,以“k”开头,后跟大小写混合。” -- 请注意“在计划期间”部分。
- 根据 https://google.github.io/styleguide/cppguide.html#Access_Control “将类的数据成员设为私有,除非它们是常量。这简化了对不变量的推理,代价是必要时以访问器(通常为常量)形式的一些简单样板。”
所以...我认为这留下了一些解释的空间,我想知道是否有人知道标准的精神是什么...
class A {
const int size_;
public:
A(int size) : size_(size) {}
};
- 尾随下划线是“私有”还是“阶级”的标志?
- const 字段应该是“kSize”还是“size_”?
- 如果改为公开,应该是“大小”吗?
解决方法
在您的示例中:
class A {
const int size_;
就样式指南而言,此成员变量不是“常量”。它的值在构建后无法更改,但每个实例都不同。类中的“常量”将是 constexpr
或 static const
或 enum
。就目前而言,它不是常量,因此没有 k
前缀。
单独回答您的具体问题:
- 尾随下划线表明它是一个类成员变量。
-
size_
因为它不是风格指南中的“常量”。 - 将其公开会违反样式指南,因此这并没有真正的答案。
最后,请注意 const
成员变量禁止编译器生成的赋值运算符,这是您不经常看到它们的原因之一。