setter中的样式首选项:Class :: member = value或this-> member = value?

时间:2019-05-30 07:11:41

标签: c++ setter

这似乎是一个非常简单的问题,但是我一直无法找到任何意见。用C ++编写setter时,

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

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

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

1 个答案:

答案 0 :(得分:1)

区别纯粹是语法上的。两种版本的效果完全相同。 member是静态还是非静态都没有关系。只能从静态成员函数内部使用this->版本,因为没有对象,因此也没有this

因为感觉很奇怪,所以需要重复:即使member static 成员变量,this->member = value;也是有效的,并且做对了。

关于偏好一种样式而不是另一种样式:就像所有高度主观的风格选择一样。明确的答案实际上是不可能的。但是总的来说,有些指标表明C ++社区更喜欢什么。您可能会看:

  • GitHub等上的开源C ++代码或您的标准库实现
  • 在CppCon,Meeting C ++,C ++ Now等主要会议的演示幻灯片上的代码片段。
  • 主要C ++书籍,例如Stroustroup的 C ++编程语言或Scott Meyers的有效C ++ 系列

考虑到所有我有信心地说,流行风格不是你们两个的全部,而是:

member = value;

纯属个人观点:对于非静态成员,ClassName::版本感到不熟悉,在某种程度上,我会在代码审查中指出它。 this->通常让我怀疑“这是Java程序员编写的吗?”,但是总体而言-尤其是如果使用得一贯的话-这是一个不错的风格,尽管不寻常。在某些特殊的模板元编程环境中,甚至是强制性的。