gpt4 book ai didi

c++ - 名称冲突时局部变量和类属性的优先级

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:02 24 4
gpt4 key购买 nike

假设您有这段非常愚蠢的代码(它只是为了方便提出接下来的问题):

#include <iostream>

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();
}

When I tested , 不出所料,它显示 5 和 5。但这真的是确定性的吗?总是优先考虑局部变量(或方法参数),然后是对象属性吗?

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

PS:我知道这是不好的做法,发现主题中提到最好的方法是避免名称冲突(如 this one )......

最佳答案

这是明确定义的:

N3337 [basic.scope.hiding]/3: In a member function definition, the declaration of a name at block scope hides the declaration of a member of the class with the same name; see 3.3.7.

m 在 block 范围内的成员函数定义中,因此它隐藏了类成员 m

关于c++ - 名称冲突时局部变量和类属性的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com