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

Member variables and method variables for conflicting names

本文关键字:变量 成员 方法 冲突      更新时间:2023-10-16

有关C 类的问题。我有一些代码,其中包含各种类别。在一个课程中,它有一个会员,双重温度。但是在一种类方法中,有一个定义:双重温度。我没有任何编译器错误甚至警告,所以我认为在这种情况下存在某些默认行为?任何人都可以对此阐明吗?

范围决定编译器如何查找变量名称。

在您的情况下,本地temp正在隐藏成员变量temp,因此所有对temp的参考都将解决到您的本地temp

到处使用此操作的this指针明确获取成员变量:

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

默认情况下将使用最内向的temp

如果要访问类成员,请使用this->temp

许多C 程序员都观察到所有类数据成员的常规前缀m_

以下是它的工作方式:

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

标志-Wshadow在GCC中打开警告。

在较窄范围中定义的变量隐藏在它们上方定义的变量。一些编译器确实发出警告(您是否使用-Wall编译?)