C++ 什么时候应该这样做->;被使用?

C++ 什么时候应该这样做->;被使用?,c++,C++,我想知道这个->是否应该同时使用: void SomeClass::someFunc(int powder) { this->powder = powder; } //and void SomeClass::someFunc(bool enabled) { this->isEnabled = enabled; } 我想知道后一种方法是否必须正确,或者isEnabled=enabled是否足够 谢谢这个只是指向对象本身的指针。它是为可读性而设计的,这样您就知道您

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

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

//and
void SomeClass::someFunc(bool enabled)
{
     this->isEnabled = enabled;
}
我想知道后一种方法是否必须正确,或者isEnabled=enabled是否足够


谢谢

这个
只是指向对象本身的指针。它是为可读性而设计的,这样您就知道您引用的是对象函数或变量,而不是函数中的某些内容

我认为除了可读性之外,没有其他好的理由:-)


如果你想避免模棱两可的引用,这也很好。假设函数中有一个全局变量和一个同名的变量,那么这个->将引用全局变量 -> <代码>,但是它可能是个人喜好。不管有没有代码,都会做同样的事情

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();
}

我倾向于遵循这个简单的拇指法则:

  • 属性:不
    这个
    ,如果它不是方法的参数,那么它显然是类的属性(我倾向于依赖命名约定来区分它们)
  • 方法:
    this->
    ,用于区分类方法和独立函数
第二种方法也带来了一致性,因为它在
模板
d代码中可能是必需的(我写了很多,尤其是在我的宠物项目中)

这背后的理由很简单:尽可能多地写,以明确(即使读者的生活更轻松),但不要多写一针(这将是杂乱无章的),这是安托万·德·圣埃克苏佩里(Antoine de Saint Exupery)的观点:

完美是达到的,不是当没有更多的东西可以添加时,而是当没有什么东西可以带走时


你为什么不试试呢。。仅当存在歧义时(例如,第一种情况下,参数优先,但也有其他情况,如一些模糊的模板情况),才需要此->我知道什么有效,什么无效。我只是说哪一种是正确的OOP正确的OOP对主题没有任何评论。就像大括号位置一样,这是一个编码风格的问题。这与“this”的讨论是一样的。在java中,它通常以“这是一个风格的问题,尝试采用您正在处理的项目的风格”结尾。当您喜欢IntelliSense(又称自动完成)时,通常会使用它。在某些情况下,它有助于消除歧义这不是因为模棱两可,而是因为依赖名称的查找延迟到实例化点。
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)