带有继承的C++作用域解析用法
C++ scope resolution usage with inheritance
我最近偶然发现了两种不同的方法来表示派生类中基类中的变量。我知道这是一个主观的问题,但我想听听支持/反对下面列出的两种不同形式的语法的论点。。。
版本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++风格指南,所有成员变量无论如何都应该是私有的。因此,在我的代码中不应该存在上述任何示例,除非访问与该类相关的常量。在这种情况下,明确说明常数的来源可能是有意义的。
再次感谢您的回答、保证和精彩的讨论。
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- C++具有不同作用域的相同名称的名称解析规则
- 用于返回嵌套类类型的作用域解析运算符
- 变量声明中结构的作用域解析是什么意思
- 模板类中静态函数或指针的作用域解析
- 作用域解析运算符和常量
- 模板子类作用域解析
- ::(作用域解析运算符)在C++中用于多种用途
- 使用指向成员的指针时,如何通过作用域解析运算符获取类成员的地址
- 带有继承的C++作用域解析用法
- ::c++中模板函数调用前面的作用域解析运算符
- 为什么作用域解析对覆盖的变量不起作用?
- isalnum的作用域解析运算符
- c++新内存替换和作用域解析
- 为什么c++的作用域解析操作符是::
- ::操作符能否出现在与限定名查找中的作用域解析不同的上下文中?
- c++语言中的块作用域解析
- 在类定义的类名中,作用域解析操作符的作用是什么?
- 关于c++中作用域解析操作符的问题
- 为什么基类构造函数没有被作用域解析操作符调用