什么时候应该 - >使用?

时间:2010-12-20 15:47:54

标签: c++

我想知道这是否 - >应该同时使用:

void SomeClass::someFunc(int powder)
{
     this->powder = powder;
}

//and
void SomeClass::someFunc(bool enabled)
{
     this->isEnabled = enabled;
}

我想知道后者是否必须正确或者isEnabled =启用是否足够。

由于

4 个答案:

答案 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>

  

实现完美,而不是在没有其他任何东西可以添加的情况下,但是当没有任何东西可以带走时。