【问题标题】:what is the proper case of constant class member fields according to the google c++ style guide? [closed]根据google c++ style guide,常量类成员字段的正确情况是什么? [关闭]
【发布时间】:2021-08-11 18:33:56
【问题描述】:

所以...我认为这留下了一些解释空间,我想知道是否有人知道标准的精神是什么...

class A {
  const int size_;
public:
  A(int size) : size_(size) {}
};
  1. 结尾的下划线是“私人”还是“阶级”的标志?
  2. const 字段应该是“kSize”还是“size_”?
  3. 如果移到公开,应该是“大小”吗?

【问题讨论】:

  • “我认为这留下了一点解释的空间”——怎么会这样?第一个引述没有提到“私人”——you 毫无理由地引入了这个词。第二个引用不适用于您的代码,因为您的代码与静态存储持续时间无关(您甚至强调了这一点!)。我确实在第三个引用中看到了一些解释空间,但这只是因为您遗漏了定义“常量”在该上下文中的含义的链接(它链接到第二个引用)。所以……看来所有的“解释空间”都是你介绍的?
  • 我应该更清楚...结构字段没有尾随的“”并且必须是公开的。与附加或附加的“”相结合,在其他语言(例如python / dart)中通常意味着私有,这让我怀疑它。附加了“_”的公共字段看起来有些奇怪......也许只是我,但这就是我问的原因。
  • 这里是关于样式中常量的模糊部分(粗体)> 所有这些具有静态存储持续时间的变量(即静态和全局变量,请参阅存储持续时间了解详细信息)都应以这种方式命名。 此约定对于其他存储类的变量是可选的,例如自动变量,否则适用通常的变量命名规则。来自google.github.io/styleguide/cppguide.html#Constant_Names
  • 诚然,阅读标准时更难使用的技能之一就是不阅读不存在的东西,尤其是当您过去看到过类似的东西时。 (顺便说一句,尝试使用反引号在 cmets 中的下划线上强制“代码格式化”,如 _。)

标签: c++ google-style-guide


【解决方案1】:

在你的例子中:

class A {
    const int size_;

对于样式指南而言,此成员变量不是“常量”。它的值在构造后不能更改,但每个实例都不同。类中的“常量”是constexprstatic constenum。就目前而言,它不是一个常量,因此没有k 前缀。

单独回答您的具体问题:

  1. 结尾的下划线告诉您它是一个类成员变量。
  2. size_ 因为就样式指南而言,它不是“常量”。
  3. 将其公开会违反样式指南,因此这并没有真正的答案。

最后,请注意const 成员变量会抑制编译器生成的赋值运算符,这是您不经常看到它们的原因之一。

【讨论】:

  • 我粘贴的第三个项目符号,关于访问控制,直接来自 stile 指南,建议可以将 const 数据成员声明为 public...> 将类的数据成员设为私有,除非它们是常量。这简化了关于不变量的推理,必要时以访问器(通常是 const)形式的一些简单样板为代价。感谢您对 (2) 的裁决。上述信息是否会影响您对 (3) 的反应?
  • 哦,我想你是说我的示例成员变量“根据样式指南不是常量”,尽管有“const”修饰符,因为样式指南仅将常量定义为保留的东西整个程序的常数?因此......(1)你应该总是把尾随_和(2)你不应该有一个常规实例类成员public(尽管它是const限定符)......我想我买这个解释,但是请确认我理解正确!
  • @Kamen: const 在风格指南方面并没有使某些东西成为“常数”。就样式指南而言,“常量”是一个固定值,不仅在构建后固定,而且在程序的生命周期内固定。所以constexprstatic const 成员是常量,但const 不是。所以是的,你现在已经正确理解了我的答案。
  • 有人关闭了这个问题,说它是基于意见的......哦,具有讽刺意味。这是承认标准没有明确规定吗?我仍然喜欢你的回答,并且会继续这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2013-12-26
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多