7

我想知道在 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”还是使用它来明确您引用的是一个好习惯同一班级的成员。

4

6 回答 6

10

对此没有单一的答案。这取决于上下文,也取决于你问谁。

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

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

在编写良好的代码中,您指的是局部变量还是成员变量通常很明显,因此this实际上并没有太多作用。但有时读者很难确定一个变量是否是类成员。然后this是澄清的好方法。

于 2012-04-25T06:21:03.970 回答
5

如果 usingthis使阅读更容易(即更容易理解),那么额外的打字是值得的。

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

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

于 2012-04-25T06:44:36.747 回答
3

它对编译器没有影响(在您的示例中)。
这是用户偏好的问题,有些人觉得它更直观,而有些人觉得它不需要额外的输入。
因此,如果您使用的编码指南表明您应该使用它,请使用它。

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

于 2012-04-25T06:13:12.000 回答
2

我个人不喜欢使用this.
但我认为这是个人喜好的事情。只要你的一致就没有关系。

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

于 2012-04-25T06:18:03.673 回答
2

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

于 2012-04-25T06:25:27.230 回答
0

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

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

于 2012-04-25T06:16:45.903 回答