C++成员变量
C++ Member Variables
考虑以下类:
class A
{
A();
int number;
void setNumber(int number);
};
您可以通过 3 种方式实现"setNumber":
方法 1:使用"this"指针。
void A::setNumber(int number)
{
this->number = number;
}
方法 2: 使用范围解析运算符。
void A::setNumber(int number)
{
A::number = number;
}
方法3:相反,用"m"或"_"表示所有成员变量(这是我的首选方法)。
void A::setNumber(int number)
{
mNumber = number;
}
这只是个人喜好,还是选择特定方法有好处?
这主要是个人喜好,但让我从一个同时制作许多小游戏的公司内部分享我对这个问题的看法(因此我周围使用了许多编码风格)。
这个链接有几个很好的、相关的答案:为什么在C++类中对成员变量使用前缀
您的选择 1:
void A::setNumber(int number)
{
this->number = number;
}
首先,许多程序员倾向于发现这很麻烦,不断输入" this-> "。其次,更重要的是,如果任何变量与参数或局部变量共享名称,则旨在更改"number"名称的查找替换也可能影响位于查找-替换作用域中的成员变量。
您的选择 2:
void A::setNumber(int number)
{
A::number = number;
}
我遇到的问题是,在大型类或具有大型函数的类中(您看不到函数或意外命名了类),A::(thing)的格式看起来非常像访问命名空间的一部分,因此可能会产生误导。另一个问题与上一个选项中的#2相同,如果您的名称与您使用的任何变量相似,有时可能会出现意想不到的混淆。
您的选择 3:
void A::setNumber(int number)
{
mNumber = number;
}
这是这三个选项中最好的。通过创建(并坚持!)涉及清晰且有意义的前缀的语法,您不仅可以创建一个局部(或全局)变量不会共享的唯一名称,而且可以立即清楚地说明该变量的声明位置,无论您在上下文中找到它。我已经看到它像这个"mVariable"和这个"m_variable"一样完成,这主要取决于您是否更喜欢下划线而不是大写连接。此外,如果你的风格倾向于添加诸如 ' p 's on 表示指针,或 'g 's on 表示全局,这种风格将很好地融合并受到读者的期望。
这是一个风格问题,因此是个人偏好,或者与你一起工作的团队或与你一起工作的团队的老板的偏好。
选项 4:
void A::setNumber(int n)
{
number = n;
}
为什么对成员和参数使用相同的名称的好处。这不会带来任何好处。当然,现在很清楚了,但是当你的方法变大,原型不再适合屏幕,并且有一些其他开发人员编写代码时,他可能会忘记限定成员。
它的所有个人偏好
但这里有一个很好的非语言水平的讨论
https://stackoverflow.com/questions/381098/what-naming-convention-do-you-use-for-member-variables
我想说的是方法1和方法3之间的选择是个人或组织风格的问题。
方法 2 是劣质的,因为 Class::member 通常表示静态成员变量,因此如果用于消除参数和成员变量之间的歧义,则会导致混淆。
我将通过提供更好的变体来同意 Luchian 的观点。您提供的其他示例过于繁琐或令人困惑。
选项 4:
void A::setNumber(int aNumber)
{
theNumber = aNumber;
}
这是我们在雇主使用的编码标准的一部分,你描述的内容非常清楚。它不是匈牙利符号。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组