C++ 正确用法,this 指针

标签 c++ this

<分区>

Possible Duplicate:
When should I make explicit use of the this pointer?

我想知道“this”指针的正确用法。

我看到有人创建了一个类构造函数,其中传递的参数变量名为“data”。 然而,他已经有一个名为“data”的私有(private)成员变量,因此他只是使用:

this->data = data;

简单地使用就可以了

data = data_in

(如果参数名为 data_in),无需调用“this”指针和引用成员类型。

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

此外,出于好奇,我对代码进行了检测,只是为了看看幕后发生了什么,似乎“this”指针无论如何都会被调用。我想这就是类对象引用的方式。

最佳答案

在大多数情况下,特别是取消引用 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
    }
};

您会注意到您必须使用 this指针,以便正确解析从模板基类继承的非静态数据成员。这是因为 base_class<T>::a是依赖名称,在本例中依赖于模板参数 T , 但在没有 this 的情况下使用时指针,它被视为非依赖名称,因此不会在依赖基类命名空间中查找。因此没有对 this 的特定取消引用指针,您最终会遇到类似“a 未在此范围内声明”或类似内容的编译器错误。

关于C++ 正确用法,this 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138466/

相关文章:

通过构造函数为 vector 预分配 C++ 内存失败

Java: "this"关键字的问题

c++ - 我在我的程序中使用 ffmpeg 库来录制视频和音频

c++ - 如何在控制台的三个不同列中一起打印三张 map ? C++

c++ - 如何实现符合标准的迭代器/容器?

c++ - 我可以通过设置工具链文件来替换调用 cmake -G<generator> 选项和调用 vcvarsall.bat 吗?

java - 是否应该启用 Checkstyle 中的 RequireThis 检查?

javascript - JavaScript 中的词法 this

javascript - this 关键字有反义词吗?

javascript - 为什么返回函数时要修复 'this'?