C++使用"this"是一个好习惯吗?

In C++ is it a good practice to use 'this'?

本文关键字:一个 好习惯 使用 this C++      更新时间:2023-10-16

我想知道在C++中使用"this"是否是一种好习惯。起初我认为我应该是,因为这样你就可以清楚地表明你所引用的东西是当前类的成员,但有时你以这样的代码结束:

Document::Document(QWidget *parent) : QWidget(parent)
{
    this->file = 0;
    this->layout = new QGridLayout(this);
    this->layout->setSpacing(2);
    this->layout->setMargin(0);
    this->setLayout(this.layout);
    this->textArea = new QTextEdit(this);
    this->textArea->setLineWrapMode(QTextEdit::NoWrap);
    this->textArea->setAcceptDrops(true);
    this->textArea->setAcceptRichText(true);
    this->textArea->setUndoRedoEnabled(true);
    this->textArea->setFont(QFont("Mono" , 11));
    this->layout->addWidget(this->textArea);
    this->textArea->show();
    this->textArea->setFocus();
}

我认为如果没有所有的"这个",这看起来会好得多,特别是当它像this->layout->addWidget(this.textArea);一样使用时。而且我认为代码在大多数情况下应该使用相同的样式以使其更容易阅读,因此,我应该在必要时使用"this",还是使用它来明确您正在引用同一类的成员是一种很好的做法。

这个问题没有单一的答案。这取决于上下文,这取决于你问谁。

有些人一直在使用this。有些人从不使用它。有些则用特殊的前缀重命名所有成员变量(mFile而不是file)。

我更喜欢只在必要时使用this前缀以避免歧义。

在编写良好的代码中,引用的是局部变量还是成员变量通常很明显,因此this并没有真正做太多事情。但有时读者可能很难确定变量是否是类成员。那么this是澄清的好方法。

如果使用this更容易阅读(也就是说更容易理解),那么额外的输入是非常值得的。

在一个复杂的程序中,每行代码都会写一次,但会读很多次(由不同的程序员读取),所以这是一个不错的投资。

我所知道的最具可读性的语言之一,Python,迫使你每次都写self.x(相当于this->x C++),这根本不是问题。它的问题在于,在 Python 中,当您编写slef.x而不是self.x时,错误会在运行时捕获,但这是一个不同的不相关问题......

它对编译器没有区别(在您的示例中)。
这是用户的偏好问题,有些人发现它更直观,而有些人发现它不需要额外的打字。
因此,如果您使用的编码指南说您应该使用它,请使用它。

请注意,在某些情况下,您确实需要使用this因为没有其他方法可以解决这个问题,但在我看来,这不是您的问题。

我个人不喜欢使用 this .
但我认为这是个人喜好的事情。只要你始终如一,应该没关系。

注意:我还确保我使用 -WShadow -WError 编译

在我看来,对成员使用"this"并不常见。恕我直言,它看起来很乱。我更喜欢对所有成员使用"m_"前缀,所以很清楚什么是成员,什么是局部变量。无论如何,还有更重要的良好实践,例如斯科特·迈耶斯(Scott Meyers)撰写的更有效C++。

我通常更喜欢对所有成员使用this的代码。

在您的示例中,它看起来是多余的,因为您没有引用任何局部变量。但是,在使用局部变量和实例(甚至类)变量混合的代码中,最好确切地知道要查找的位置。