1

我最近偶然发现了两种不同的方法来表示派生类中基类的变量。我知道这是一个主观问题,但我想听听支持/反对下面列出的两种不同语法形式的论点......

版本 1:

// in some code in the derived class...
base_class_member_variable_ = 0xBEEF;

版本 2:

// in some code in the derived class...
MyBaseClass::base_class_member_variable_ = 0xBEEF;

此外,当基类位于不同的命名空间中时,版本 2 的扩展:

// in some code in the derived class...
base_namespace::MyBaseClass::base_class_member_variable_ = 0xBEEF;

我想知道如果没有在派生类中声明/定义变量,那么显式说明变量的来源是否有意义。任何一个版本都可以编译,所以我们在这里只讨论样式。

我知道这个话题是非常主观的。但是,我真的在努力改进我的编码实践,在我目前的职位上无法接触到具有 C++ 经验的高级工程师。在此先感谢您的帮助。

4

2 回答 2

1

所有额外的作用域内容只是明确说明编译器无论如何都能推断出什么。因此,除非有一个特别模棱两可的案例,否则没有必要将所有范围界定的东西放在那里。

至于在风格方面什么是最好的并且可以帮助其他人更好地理解代码......我将避免这种情况,因为它非常接近于呈现不支持的观点。但是,我要说的是,我经常看到的是 1)人们不会使用比消除歧义所需的更多的范围修饰符,以及 2)人们确实经常有关于如何引用成员变量的编码标准(例如命名约定)至。例如,它们可能以前缀“m_”开始所有成员变量,或者它们可能在每次引用成员变量时使用“this->”。当然不是每个人都这样做,但在我看来,这是相对普遍的做法。

也就是说,如果您自己工作,那么您可以做任何适合您的事情。另一方面,如果您在一个大型团队中工作,那么您应该了解该团队的编码风格约定并遵循这些约定。

于 2013-07-09T04:31:36.030 回答
0

经过更多研究,看起来我的问题可能是一个有争议的问题。由于我坚持自己(或至少试图……)遵守 Google C++ 风格指南,所以所有成员变量无论如何都应该是私有的。因此,上述示例都不应该存在于我的代码中,除非可能访问与该类相关的常量。在这种情况下,明确说明常量的来源可能是有意义的。

再次感谢您的回答和保证以及出色的讨论。

于 2013-07-09T05:14:07.197 回答