根据我的经验,我可以在C ++中调用bug,这有点奇怪。当我打电话给这个节目时:
#include <iostream>
using namespace std;
class foo {
public:
int a;
foo(int a = 0) : a(a) {}
} a1;
class bar {
foo a;
public:
bar(foo a = a1) : a(a) {
a.a = 1;
cout << a.a << endl;
}
void print_a() {
cout << a.a << endl;
}
};
int main() {
bar zz;
zz.print_a();
a1.a = 2;
bar zz1;
zz1.print_a();
}
输出结果为:
1
0
1
2
我希望能够更改班级内部成员的值,例如栏中 foo 类对象的 a 值上课。当我更改 bar 构造函数中的 a.a 值时,看起来我只更改了局部变量。这个过程的机制是什么? C ++不会将其类中的变量视为常量参数,因为我也可以获取由方法更改的计数器。但是当反击更深一层时,结构似乎就会崩溃。
答案 0 :(得分:7)
在构造函数体中,参数名称隐藏成员名称,因此您推测,您正在修改函数参数a
,而不是成员a
。
如果您不想重命名任何变量,可以将该成员称为this->a
或bar::a
以消除歧义。