当前位置:  开发笔记 > 编程语言 > 正文

名称冲突时局部变量和类属性之间的优先级

如何解决《名称冲突时局部变量和类属性之间的优先级》经验,为你挑选了1个好方法。

假设你有这个非常愚蠢的代码(这只是为了让你轻松提出即将到来的问题):

#include 

class A
{
public:
    A() : m(0) {}

    void showM1( int m )
    {
        std::cout << m << std::endl;
    }

    void showM2()
    {   
        int m = 5;
        std::cout << m << std::endl;
    }

    int m;
};

int main()
{
    A a;
    a.showM1( 5 );
    a.showM2();
}

当我测试时,没有惊喜,它显示5和5.但这是否真的是确定性的?优先级是否总是赋予局部变量(或方法参数)和对象属性?

我问,因为我们在一个巨大的项目中重命名了一些变量,并且只是想确保行为不是"不确定",并且可能因平台,编译器而异.

PS:我知道这是不好的实践,发现主题提到最好的方法是避免名称冲突(像这一个)....



1> TartanLlama..:

这是明确定义的:

N3337 [basic.scope.hiding]/3:在成员函数定义中,块作用域中名称的声明隐藏了具有相同名称的类成员的声明; 见3.3.7.

m在块作用域中的成员函数定义中,因此它隐藏了类成员m.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有