在类范围内声明与类属性同名的局部变量
Declaring a local variable within class scope with same name as a class attribute
在观察另一个人的代码时,我意识到在类A的方法中,他声明了一个与类A变量同名的局部int
。例如:
classA.h
:
class A{
int Data;
void MethodA();
};
classA.cpp
:
#include "classA.h"
using namespace std;
void A::MethodA(){
int Data; //local variable has same name as class attribute
Data = 4;
//Rest of Code
}
我发现编译器接受这个而不返回错误是很奇怪的。在上面的例子中,是将4分配给本地的Data
还是A::Data
,在更复杂的情况下,这会导致什么问题?
局部变量将遮蔽成员变量(它的作用域更窄)。如果你只写
Data = 4;
将分配给局部变量Data
。您仍然可以使用
this->Data = 4;
基本上和
一样{
int data = 4;
{
int data = 2;
data++; // affects only the inner one
}
}
对于将来的问题:只要你和所有使用你代码的人都理解这些规则,并且知道你是故意这么做的,就不会有问题。如果你不打算故意这样做,让你的编译器发出警告。
但是,如果您遵循成员变量的命名方案,例如,添加像
这样的下划线,则肯定会节省时间。class A{
int Data_;
void MethodA();
};
相关文章:
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++中静态方法的局部变量范围
- 变量不在 lambda 的范围内
- 离开范围后如何保护局部变量的值?
- 检查私有成员变量是否在一定范围内,如果没有调整
- 如何找到在本地范围内声明的变量的地址?
- 变量未在此范围内声明 数组线性搜索
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 在其范围之外使用局部变量
- 在 mingw64- 变量下的窗口中编译 openvpn3 时出错,未在范围内声明
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 尝试声明函数的局部变量,但得到范围错误
- 无法在命名空间范围内分配变量
- 为什么变量在局部范围内声明,并放入范围外可见的向量中
- 在最近的封闭范围内使用using指令声明局部外部变量
- 如何在C++的另一个范围内使用局部变量
- 在类范围内声明与类属性同名的局部变量