【问题标题】:Declaring a local variable within class scope with same name as a class attribute在类范围内声明一个与类属性同名的局部变量
【发布时间】:2015-05-27 22:48:09
【问题描述】:

在观察另一个人的代码时,我意识到他在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,在更复杂的情况下会导致什么问题?

【问题讨论】:

  • 这不是错误,但可以配置为警告See this question.
  • 那么,当你尝试它时,发生了什么?

标签: c++ class variables attributes local


【解决方案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();
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多