带有继承的C++作用域解析用法

C++ scope resolution usage with inheritance

本文关键字:作用域解析 用法 C++ 继承      更新时间:2023-10-16

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

版本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++经验的高级工程师。提前感谢您的帮助。

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

至于在风格方面什么是最好的,并帮助其他人更好地理解代码。。。我会避免这样做,因为这几乎是一种不可支持的观点。然而,我要说的是,我经常看到的是:1)人们使用的作用域修饰符不会超过消除歧义所需的数量,2)人们通常对如何引用成员变量有编码标准(如命名约定)。例如,他们可能会以前缀"m_"开头所有成员变量,或者每次引用成员变量时都使用"this->"。当然,并不是每个人都这样做,但在我看来,这是一种相对常见的做法。

也就是说,如果你自己工作,那么你可以做任何对你有用的事情。另一方面,如果你在一个大团队中工作,那么你应该了解该团队的编码风格惯例,并遵循这些惯例。

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

再次感谢您的回答、保证和精彩的讨论。