有什么理由我不应该这样做吗?
是的,你不应该这样做是有原因的。
this->
仅当名称被隐藏时才严格要求引用成员变量,例如:
class Foo
{
public:
void bang(int val);
int val;
};
void Foo::bang(int val)
{
val = val;
}
int main()
{
Foo foo;
foo.val = 42;
foo.bang(84);
cout << foo.val;
}
该程序的输出是42
, not 84
,因为在bang
成员变量中已被隐藏,并val = val
导致无操作。在这种情况下,this->
需要:
void Foo::bang(int val)
{
this->val = val;
}
在其他情况下,使用this->
没有效果,因此不需要。
这本身并不是不使用this->
. 然而,这样一个程序的维护是不使用的一个理由this->
。
您正在使用this->
作为文档的一种方式来指定后面的变量是成员变量。然而,对于大多数程序员来说,这并不是 usignthis->
实际记录的内容。使用this->
文件是:
这里隐藏了一个名字,所以我正在使用一种特殊的技术来解决这个问题。
由于这不是您想要传达的内容,因此您的文档已损坏。
与其this->
用来记录名称是成员变量,不如始终使用合理的命名方案,其中成员变量和方法参数永远不会相同。
编辑 考虑相同想法的另一个插图。
假设在我的代码库中,你发现了这个:
int main()
{
int(*fn)(int) = pingpong;
(fn)(42);
}
相当不寻常的构造,但作为一个熟练的 C++ 程序员,你会看到这里发生了什么。 fn
是一个指向函数的指针,并且被分配了 的值pingpong
,不管它是什么。pingpong
然后用单int
值调用指向的函数42
。所以,想知道为什么你需要这样一个小发明,你去寻找pingpong
并找到这个:
static int(*pingpong)(int) = bangbang;
好的,那是什么bangbang
?
int bangbang(int val)
{
cout << val;
return val+1;
}
“现在,等一下。这到底是怎么回事?为什么我们需要创建一个指向函数的指针,然后通过它调用?为什么不直接调用函数?这不一样吗?”
int main()
{
bangbang(42);
}
是的,它是一样的。观察到的效果是一样的。
想知道这是否真的只有它,你会看到:
/* IMPLEMENTATION NOTE
*
* I use pointers-to-function to call free functions
* to document the difference between free functions
* and member functions.
*/
所以我们使用指向函数的唯一原因是为了表明被调用的函数是一个自由函数而不是一个成员函数。
对你来说,这似乎只是一个“风格问题”吗?因为这对我来说似乎很疯狂。