使用'this - >'可以提高效益吗?参考班级成员?

时间:2013-11-18 06:18:48

标签: c++ this-pointer

我想知道在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;
};

4 个答案:

答案 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.是很常见的。

PS:另一个可能的原因可能是人们只想强调它是一个成员领域,而不是别的东西。由于大多数简单的编辑器无法突出显示这些字段,因此可以提高代码的可读性。

答案 2 :(得分:0)

如果您不使用它,将暗示。所以这两个写在编译代码中是等价的,因为编译器会添加this

唯一可能出现的问题是变量名称的含糊不清。但只要您使用m__m前缀(或后缀)成员的惯例,您就应该是安全的。

您还可以看到When should I make explicit use of the `this` pointer?

答案 3 :(得分:0)

不..否则每个人都会写这样的代码。 也许有人认为这很容易阅读。也许他是一名java开发人员。