相互冲突名称的成员变量和方法变量
Member variables and method variables for conflicting names
有关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
编译?)
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组