关于c ++类的问题。我有一些代码,里面有各种类。在一个类中它有一个成员,双倍温度。但是在其中一个类方法中有定义:double temp。 我没有得到任何编译器错误甚至警告,所以我假设在这种情况下有一些默认行为?任何人都可以对此有所了解吗?
答案 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
}
};
答案 1 :(得分:2)
默认情况下将使用最里面的temp
。
如果您想访问该类成员,请使用this->temp
。
许多C ++程序员观察所有类数据成员的传统前缀m_
。
答案 2 :(得分:2)
范围规则指示编译器如何查找变量名称。
在您的情况下,本地temp
隐藏了成员变量temp
,因此对temp
的所有引用都将解析为您的本地temp
。
要解决此问题,请使用this
指针显式获取成员变量:
this->temp = .... // member variable
temp = .... // local variable
答案 3 :(得分:1)
在较窄范围内定义的变量会隐藏在其上方定义的变量。有些编译器会对此发出警告(您是使用-Wall
进行编译吗?)