setter 中的样式偏好:Class::member = value 或 this->member = value?

Style preference in setters: Class::member = value or this->member = value?

这似乎是一个非常简单的问题,但我一直找不到关于它的任何意见。 C++写setter时,

有什么区别
void ClassName::set_member( type value ) {
    ClassName::member = value;
}

void ClassName::set_member( type value ) {
    this->member = value;
}

CLion 生成了第一个版本,所以我怀疑它有一些优势,但我不知道那会是什么。

纯语法上的区别。两个版本的效果完全相同。 member 是静态的还是 non-static 甚至都没有关系。只能从静态成员函数内部不能使用 this-> 版本,因为没有 object 因此没有 this.

因为感觉真的很奇怪所以值得重复:即使 member 是一个 static 成员变量 this->member = value; 也是有效的并且做正确的事情。

至于偏爱一种风格而不是另一种风格:就像所有高度主观的风格选择一样。一个明确的答案是不可能的。但是有一些指标表明 C++ 社区通常更喜欢什么。你可能会看看:

  • 开源 C++ 代码 GitHub 等,或您的标准库实现
  • CppCon、Meeting C++、C++ Now 等主要会议的演示幻灯片上的代码片段
  • 主要的 C++ 书籍,例如Stroustroup 的 The C++ Programming Language 或 Scott Meyers 的 Effective C++ 系列

考虑到所有这些,我有信心说流行的风格是你们两个中的 none,但是:

member = value;

纯个人观点:对于 non-static 成员来说,ClassName:: 版本感觉不熟悉,以至于我会在代码审查中指出。 this-> 通常让我想知道“这是 Java 程序员写的吗?”,但总的来说——尤其是如果一直使用的话——这是一种不错的风格,尽管不寻常;在一些特殊的模板元编程情况下,它甚至是强制性的。