在类范围内声明一个与类属性同名的局部变量

时间:2015-05-27 22:48:10

标签: c++ class variables attributes local

在观察另一个人的代码时,我意识到在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是否会被分配给本地数据或A :: Data,以及在更复杂的情况下会出现什么问题?

1 个答案:

答案 0 :(得分:5)

局部变量将遮蔽成员1(它具有更窄的范围)。如果你只是写

Data = 4;

您将分配给本地变量Data。您仍然可以使用

访问成员变量
this->Data = 4;

这基本上就像

一样
{
int data = 4;
    {
    int data = 2;
    data++; // affects only the inner one
    }
}

对于未来的问题:只要您和将来使用您的代码的每个人都理解规则并且意识到您故意这样做就没有问题。如果您不打算故意这样做,请让编译器对此发出警告。

但是,如果您遵循成员变量的命名方案,例如,它肯定会更安全。附加下划线

class A{
    int Data_;

    void MethodA();
};