冲突名称的成员变量和方法变量

时间:2014-01-24 15:55:43

标签: c++ oop

关于c ++类的问题。我有一些代码,里面有各种类。在一个类中它有一个成员,双倍温度。但是在其中一个类方法中有定义:double temp。 我没有得到任何编译器错误甚至警告,所以我假设在这种情况下有一些默认行为?任何人都可以对此有所了解吗?

4 个答案:

答案 0 :(得分:2)

以下是它的工作原理:

struct Foo
{
   double temp;

   void bar()
   {
      double temp;       // "hides" the member
      temp = 3.0;        // assigns to the local
      this->temp = 5.0;  // assigns to the member
   }

   void baz()
   {
      temp = 3.0;        // assigns to the member
      this->temp = 5.0;  // assigns to the member
   }
};

The flag -Wshadow turns on a warning for this, in GCC

答案 1 :(得分:2)

默认情况下将使用最里面的temp

如果您想访问该类成员,请使用this->temp

许多C ++程序员观察所有类数据成员的传统前缀m_

答案 2 :(得分:2)

范围规则指示编译器如何查找变量名称。

在您的情况下,本地temp隐藏了成员变量temp,因此对temp的所有引用都将解析为您的本地temp

要解决此问题,请使用this指针显式获取成员变量:

this->temp = .... // member variable
temp = .... // local variable

答案 3 :(得分:1)

在较窄范围内定义的变量会隐藏在其上方定义的变量。有些编译器会对此发出警告(您是使用-Wall进行编译吗?)