我想知道在c ++中使用'this'来引用类成员而不是不使用它会有什么优势吗?
例如......
class Test
{
public:
Test();
void print_test()
{
std::cout << this -> m_x // Using 'this'
<< endl;
std::cout << m_x // Rather than referencing 'm_x' this way
<< endl;
}
private:
int m_x;
int m_y;
};
答案 0 :(得分:5)
不,没有性能差异。对于编译器,含义是相同的。
好吧,差不多......你唯一需要说this
的唯一一次是你在内部范围内有一个同名的变量来遮蔽成员变量(无论如何都被视为坏形式),或者你有模板化基类的有趣情况,你需要告诉编译器一个名称是指一个基类成员(虽然这很少见)。
答案 1 :(得分:2)
有时它只是一种惯例。
基本思想是我们通常需要使用this->
来避免命名冲突:
class Value
{
public:
Value(): value(0), valueSet(false) {}
void setValue(int value) {
//value = value; ( WRONG : Naming conflict )
this->value = value; // Use this-> to distinguish between them
valueSet = true;
}
private:
int value;
bool valueSet;
}
现在没有valueSet = true;
的声明this->
看起来很难看。因此,人们更喜欢在this->
前加上前缀,以使所有内容看起来都一致:
void setValue(int value) {
this->value = value;
this->valueSet = true; // Isn't this consistent and beautiful?
}
但据我对C ++的了解,这种模式并没有被广泛使用。如果你曾经看过一些 Java 源代码,那么在成员字段访问之前添加前缀this.
是很常见的。
答案 2 :(得分:0)
如果您不使用它,将暗示。所以这两个写在编译代码中是等价的,因为编译器会添加this
。
唯一可能出现的问题是变量名称的含糊不清。但只要您使用m_
或_m
前缀(或后缀)成员的惯例,您就应该是安全的。
您还可以看到When should I make explicit use of the `this` pointer?
答案 3 :(得分:0)
不..否则每个人都会写这样的代码。 也许有人认为这很容易阅读。也许他是一名java开发人员。