具有继承的 C++ 范围解析用法

标签 c++ inheritance scope

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

版本 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->”。当然不是每个人都这样做,但在我看来这是比较普遍的做法。

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

关于具有继承的 C++ 范围解析用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17539693/

相关文章:

c++ - return 语句中的 boost::scoped_array::get()

java - 从 Java 使用大量 C++ 代码的快速(以开发人员时间为单位)方式

angularjs - UI-路由器 : Can I get always the same controller?

r - 在一个 .R 文件中定义所有函数,从另一个 .R 文件调用它们。如果可以的话怎么办?

jquery:在hover()函数中传递变量?

c++ - 我调用execvp运行Java时发生错误

c++ - Sum C++ 返回的垃圾值

javascript - 如何将购物车数组与产品数组链接起来?

python - 如何覆盖 Django 中父类(super class)模型字段的详细名称

java - Java 中的动态方法查找