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 程序员写的吗?”,但总的来说——尤其是如果一直使用的话——这是一种不错的风格,尽管不寻常;在一些特殊的模板元编程情况下,它甚至是强制性的。
这似乎是一个非常简单的问题,但我一直找不到关于它的任何意见。 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 程序员写的吗?”,但总的来说——尤其是如果一直使用的话——这是一种不错的风格,尽管不寻常;在一些特殊的模板元编程情况下,它甚至是强制性的。