C++正确用法,这个指针

jan*_*ust 4 c++ this

可能重复:
我什么时候应该明确使用this指针?

我想知道"this"指针的正确用法.

我见过有人创建了一个类构造函数,其中传递的参数传递给名为'data'的传递变量.但是他有一个名为'data'的私有成员变量,因此他只使用了:

this->data = data;

本来可以简单地使用

data = data_in

(如果参数名为data_in),则无需调用"this"指针并引用成员类型.

现在我想知道,这是正确的用法吗?使用this->member以减少对命名的复杂性?我的意思是它有效,我看到它完成了预期但我想知道你是否有些更有经验的C++男女可以说一两句话,如果这是常见的做法?

此外,出于好奇,我已经检测了代码只是为了看看幕后发生了什么,似乎无论如何都会调用"this"指针.我猜这是对类对象的引用无论如何都是这样做的.

Jas*_*son 6

在大多数情况下,特别是取消引用this指向访问类实例的非静态数据成员的指针是不必要的,但它可以帮助命名混淆,特别是当类的数据成员在单独的头文件中定义时代码模块.但是,如果要访问作为模板化类的基类成员的非静态数据成员,则必须使用this指针.换句话说,在这样的情况下:

template<typename T>
class base_class
{
    protected:
        int a;
};

template<typename T>
class derived_class : public base_class<T>
{
    void function()
    {
        a = 5; //this won't work
        this->a = 5; //this will work
    }
};
Run Code Online (Sandbox Code Playgroud)

您将注意到必须使用this指针才能从模板基类中正确解析继承的非静态数据成员.这是因为它base_class<T>::a是一个依赖名称,在这种情况下依赖于模板参数T,但在没有this指针的情况下使用它时,它被视为非依赖名称,因此不会在依赖基类中查找命名空间.因此,如果没有this指针的特定解引用,您将最终得到编译器错误,例如" a未在此范围内声明"或类似的东西.