我已经看到建议成员函数明确地使用this->
引用成员变量,以避免忘记声明成员变量并意外引用全局变量。任何人都可以评论,如果他们认为这是一个合理的预防措施或不必要的详细程度,将不必要地使代码的阅读复杂化?有没有人真正在日常的现实生活中编程呢?
答案 0 :(得分:7)
由于我经常实现类模板,因此我习惯于使用this->
限定成员变量和成员函数。在类模板的上下文中,为什么使用this->
限定名称是有用的另一个原因:不依赖于模板参数的名称仅在阶段I查找中查找,即基类中的名称取决于模板参数永远不会在基础中查找。通过使用this->
限定成员名称,他们变得依赖。例如:
#include <iostream>
void f() { std::cout << "::f()\n"; }
template <typename T>
class base
{
public:
void f() { std::cout << "base::f()\n"; }
};
template <typename T>
class derived
: public base<T>
{
public:
void g() {
f();
this->f();
}
};
int main()
{
derived<int>().g();
}
我在我的所有代码中使用this->
的限定条件,除非一些编码指南禁止我这样做(并且我认为编码指南的这方面是愚蠢和错误的)。当然,在我自己的代码中,我限定了所有可以合格且不是自定义点的名称(例如,我不会限定swap()
)。
答案 1 :(得分:1)
嗯,不,因为您通常不会使用通常会导致冲突的名称的全局变量。此外,您始终可以使用前缀来表示成员变量:
class C {
int m_Foo;
int mBar;
};
使用它可能会破坏代码大小并影响可读性。考虑
class Foo {
int a, b, c, d;
int Bar () {
return (a + b + (b / c) + d * (c + a));
}
};
尝试在上面的示例中添加this->
。
此外,每个好的编辑器都会根据其范围以不同的方式为变量着色。
答案 2 :(得分:1)
虽然成员变量的某些约定是一件好事,但我认为this->
过于冗长,并试图解决一个难得的机会。我使用m_var
或mVar
作为成员变量。
它让我想起了if (3 == var)
{199}的伪预防措施,以避免if (var == 3)
的错误。现在编译器总是会抓住它。
可读代码很重要。它可以防止错误。
答案 3 :(得分:1)
this->
通常用于避免与全局变量或成员函数的参数混合
您也可以通过为m_
成员添加前缀来获得这些优势
前缀不那么详细