在 class 范围内声明一个与 class 属性同名的局部变量
Declaring a local variable within class scope with same name as a class attribute
在观察另一个人的代码时,我发现在class A的方法中,他声明了一个与class 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();
};
在观察另一个人的代码时,我发现在class A的方法中,他声明了一个与class 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();
};