C++使用"this"是一个好习惯吗?
In C++ is it a good practice to use 'this'?
我想知道在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
的代码。
在您的示例中,它看起来是多余的,因为您没有引用任何局部变量。但是,在使用局部变量和实例(甚至类)变量混合的代码中,最好确切地知道要查找的位置。
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 如何为位集找到/实现一个好的哈希函数
- 让二传手返回布尔值是好习惯吗?
- 一个好的线程池队列大小
- 在同一C 源文件中使用多个名称空间是一个好习惯吗?
- 是聪明的指针是RAII的好习惯
- 使用 move-constructor 时将 self 重置为 nullptr 是一个好习惯吗?
- 这是 c++ 中一个好的 goto 语句吗?
- 常量参考延长对象的寿命,然后是const_cast,这是一个好主意吗?
- 将指针施放为成员函数作为C函数的指针是一个好习惯吗?
- 将C 11设置功能更改为带有转发的现代模板功能是一个好主意
- 重建operator()是重建的好习惯
- 创建多个线程以处理多个请求是一个好练习吗?
- 如何为我的班级创建一个好的界面
- std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
- 在cccallfuncnd中,我们通过指针.通过当地范围的指针是一个好习惯
- C++使用"this"是一个好习惯吗?
- 有没有一个好的习惯用法来处理替代输出流
- 在合适的地方,在成员函数的末尾添加const是不是一个好习惯?