根据 google c++ 风格指南,常量 class 成员字段的正确大小写是什么?
what is the proper case of constant class member fields according to the google c++ style guide?
- 根据 https://google.github.io/styleguide/cppguide.html#Variable_Names,classes 的数据成员(静态和非静态)的命名方式与普通非成员变量相同,但尾部有下划线。
- 根据 https://google.github.io/styleguide/cppguide.html#Constant_Names,“声明为 constexpr 或 const 的变量,其值在程序运行期间是固定的,以前导“k”命名,后跟大小写混合。” -- 注意“在节目期间”部分。
- 根据 https://google.github.io/styleguide/cppguide.html#Access_Control“使 classes 的数据成员私有,除非它们是常量。这简化了关于不变量的推理,代价是访问器形式的一些简单样板(通常const) 如果需要的话。"
所以...我认为这留下了一点解释空间,我想知道是否有人知道标准的精神是什么...
class A {
const int size_;
public:
A(int size) : size_(size) {}
};
- 末尾的下划线是“私有”的标志还是“class”的标志?
- 常量字段应该是“kSize”还是“size_”?
- 如果移动为public,应该是“size”吗?
在你的例子中:
class A {
const int size_;
对于风格指南而言,该成员变量不是“常量”。它的值在构造后不能更改,但每个实例都不同。 class 中的“常量”将是 constexpr
或 static const
或 enum
。就目前而言,它不是常量,因此没有 k
前缀。
单独回答您的具体问题:
- 结尾的下划线告诉您它是一个 class 成员变量。
size_
因为它不是样式指南中的“常量”。
- 使其成为 public 会违反风格指南,因此这并没有真正的答案。
最后,请注意 const
成员变量会抑制编译器生成的赋值运算符,这是您很少见到它们的原因之一。
- 根据 https://google.github.io/styleguide/cppguide.html#Variable_Names,classes 的数据成员(静态和非静态)的命名方式与普通非成员变量相同,但尾部有下划线。
- 根据 https://google.github.io/styleguide/cppguide.html#Constant_Names,“声明为 constexpr 或 const 的变量,其值在程序运行期间是固定的,以前导“k”命名,后跟大小写混合。” -- 注意“在节目期间”部分。
- 根据 https://google.github.io/styleguide/cppguide.html#Access_Control“使 classes 的数据成员私有,除非它们是常量。这简化了关于不变量的推理,代价是访问器形式的一些简单样板(通常const) 如果需要的话。"
所以...我认为这留下了一点解释空间,我想知道是否有人知道标准的精神是什么...
class A {
const int size_;
public:
A(int size) : size_(size) {}
};
- 末尾的下划线是“私有”的标志还是“class”的标志?
- 常量字段应该是“kSize”还是“size_”?
- 如果移动为public,应该是“size”吗?
在你的例子中:
class A {
const int size_;
对于风格指南而言,该成员变量不是“常量”。它的值在构造后不能更改,但每个实例都不同。 class 中的“常量”将是 constexpr
或 static const
或 enum
。就目前而言,它不是常量,因此没有 k
前缀。
单独回答您的具体问题:
- 结尾的下划线告诉您它是一个 class 成员变量。
size_
因为它不是样式指南中的“常量”。- 使其成为 public 会违反风格指南,因此这并没有真正的答案。
最后,请注意 const
成员变量会抑制编译器生成的赋值运算符,这是您很少见到它们的原因之一。