我想知道这是否 - >应该同时使用:
void SomeClass::someFunc(int powder)
{
this->powder = powder;
}
//and
void SomeClass::someFunc(bool enabled)
{
this->isEnabled = enabled;
}
我想知道后者是否必须正确或者isEnabled =启用是否足够。
由于
答案 0 :(得分:4)
this->
直接使用成员时需要是不明确的。这可能发生在模板代码中。
考虑一下:
#include <iostream>
template <class T>
class Foo
{
public:
Foo() {}
protected:
void testing() { std::cout << ":D" << std::endl; }
};
template <class T>
class Bar : public Foo<T>
{
public:
void subtest() { testing(); }
};
int main()
{
Bar<int> bar;
bar.subtest();
}
这将失败,因为调用testing()依赖于模板参数。要说你的意思是你需要做this->testing();
或Foo<T>::testing();
错误讯息:
temp.cpp: In member function ‘void Bar<T>::subtest()’:
temp.cpp:16:32: error: there are no arguments to ‘testing’ that depend on a template parameter, so a declaration of ‘testing’ must be available [-fpermissive]
temp.cpp:16:32: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
答案 1 :(得分:3)
this
只是指向对象本身的指针。它是为了可读性而设计的,因此您知道您正在引用对象函数或变量,而不是函数中的内容。
除了可读性之外,我认为还有其他任何好的理由: - )
如果你想避免含糊不清的引用,那也很好。假设您在函数中有一个全局变量和一个具有相同名称的变量,那么这个&gt;会引用全局变量。
答案 2 :(得分:1)
我认为在C ++中你忽略了this->
,但这可能是个人偏好。无论有没有代码仍然做同样的事情。
答案 3 :(得分:0)
我倾向于遵循这个简单的拇指规则:
this
,如果它不是方法的参数,那么它显然是类的一个属性(我倾向于依赖于命名约定来区分它们) this->
,用于区分类方法和独立函数第二个也带来了一致性,因为在template
代码中可能是必要的(我写了很多代码,特别是在我的宠物项目中)。
这背后的基本原理很简单:尽可能多地写出明确的内容(即让你的读者的生活更轻松),但不要更多(这将是混乱),这是在Antoine de Saint-Exupery的后面:< / p>
实现完美,而不是在没有其他任何东西可以添加的情况下,但是当没有任何东西可以带走时。