"this->" 是否总是可以由 C++ 中的显式范围解析替换?
Is "this->" always replaceable by explicit scope resolution in C++?
很多程序员喜欢用this->
(我的感觉是,即使没有必要)。它的优势在 class 模板中很明显,模板 class 依赖于模板参数,如果模板有虚函数,它可能是唯一的解决方案。
所以我的问题如下:不考虑依赖模板是 this->
总是可以跳过或替换为显式范围解析吗?
隐藏名字,当virtual
发挥作用时,你必须使用this
:
struct Base
{
virtual ~Base() = default;
virtual void func() { std::cout << "Base\n"; }
void foo(std::function<void()> func)
{
func(); // call the std::function
this->func(); // virtual/dynamic call
Base::func(); // static call
}
};
struct Derived : Base
{
virtual void func() { std::cout << "Derived\n"; }
};
int main()
{
Derived d;
d.foo([](){std::cout << "lambda\n";});
}
很多程序员喜欢用this->
(我的感觉是,即使没有必要)。它的优势在 class 模板中很明显,模板 class 依赖于模板参数,如果模板有虚函数,它可能是唯一的解决方案。
所以我的问题如下:不考虑依赖模板是 this->
总是可以跳过或替换为显式范围解析吗?
隐藏名字,当virtual
发挥作用时,你必须使用this
:
struct Base
{
virtual ~Base() = default;
virtual void func() { std::cout << "Base\n"; }
void foo(std::function<void()> func)
{
func(); // call the std::function
this->func(); // virtual/dynamic call
Base::func(); // static call
}
};
struct Derived : Base
{
virtual void func() { std::cout << "Derived\n"; }
};
int main()
{
Derived d;
d.foo([](){std::cout << "lambda\n";});
}