C++成员变量

C++ Member Variables

本文关键字:变量 成员 C++      更新时间:2023-10-16

考虑以下类:

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;
}

这是我们在雇主使用的编码标准的一部分,你描述的内容非常清楚。它不是匈牙利符号。