问题很简单... 在使用this-> yourvariable或yourvariable时出于某种原因有任何区别吗?类内的“this”指针
我没有发现任何问题,但我正在使用这个 - >很多,并希望知道是否有任何区别之后再继续。
我在这里看到了一篇文章的评论,我不记得是哪个主题,但是这个人说了关于使用关键词“this”的一些信息。
个人而言,我觉得直接使用变量比变量更好。它使代码更加简单和漂亮。
Joe
问题很简单... 在使用this-> yourvariable或yourvariable时出于某种原因有任何区别吗?类内的“this”指针
我没有发现任何问题,但我正在使用这个 - >很多,并希望知道是否有任何区别之后再继续。
我在这里看到了一篇文章的评论,我不记得是哪个主题,但是这个人说了关于使用关键词“this”的一些信息。
个人而言,我觉得直接使用变量比变量更好。它使代码更加简单和漂亮。
Joe
不,没有真正的区别,它只是一个范围限定符。但是,假设有一种方法
void SetFoo(Foo foo)
{
this->foo = foo;
}
其中this-> foo是私人成员。在这里,它允许您使用与类/实例变量同名的参数。
这是一种关于C#here的问及答案,我认为答案(至少是我的)是相同的。这是首选。
我发现使用this
使我的代码更具可读性,但没有理由必须这样做。如果你看看你的编译器生成的汇编代码,它应该在功能上(通常字面上)是相同的。
基本上,当函数被调用时,会传递一个隐含的参数this
,然后用它来确定哪些变量是在哪里。如果你直接使用变量,没有this->
,除了使用一些语法糖,你什么都不做。
在大多数情况下,没有区别。但也有它的确与众不同情况:
class foo
{
int i;
void bar() {
int i = 3;
i; // refers to local i
this->i; // refers to the member i
}
};
此外,与模板,你可能需要有资格的成员与this->
,使名称查找延迟:
template<typename T>
struct A
{
int i;
T* p;
};
template<typename T>
struct B : A<T>
{
void foo() {
int k = this->i; // here this-> is required
}
};
一个编译器,适当做的如果你删除“this->”它不知道我应该是什么,那么“两阶段查找”会投诉。 “this->”告诉它它是基类中的成员。由于基类依赖于模板参数,因此查找会延迟到实例化类模板。
+1来表示模板问题。海湾合作委员会通常说'
请参阅:http://stackoverflow.com/questions/993352/when-should-i-make-explicit-use-of-the-this-pointer – 2009-10-22 21:49:06
大多数编码指南我读过,没有很好的理由就皱眉了。这是代码噪声,增加了没有意义。任何阅读代码的人都应该能够从上下文中推断出您正在使用类成员。 – dss539 2009-10-22 21:49:07
使用'this'明确地使程序更具可读性 – Xinus 2009-12-13 09:24:06