我需要了解为什么x(x + 1)
仅在退出构造函数后才发生。
class A
{
protected:
int x;
public:
A(int x = 5) : x(x + 1)
{
cout << "In A::A x=" << x << endl;
}
operator int() const { return x; }
};
void main()
{
A a1(10);
cout << a1 << endl ;
}
我当时想我会得到:
In A:: An x=11
11
但是我莫名其妙地得到了
In A:: An x=10
11
答案 0 :(得分:4)
您有两个名为path.to.your.package.ServerKt
的变量。
在构造函数的主体内,参数变量将阴影成员变量。每当您在构造函数主体中使用x
时,它将是参数而不是成员。
要使用成员变量,您需要从对象中显式获取它,例如x
。
一般提示:嵌套作用域中的符号不要使用相同的名称。除了解决此问题外,还将使代码更易于阅读和理解。
答案 1 :(得分:1)
您的参数隐藏了同名的成员变量-您的定义等同于
curl -X POST -H "Content-Type: application/json" --data '{"name":"test6"}' http://<xxxx>:<yyyy>/test
当参数与成员具有相同的名称时,您需要使用class A
{
protected:
int y;
public:
A(int x = 5) : y(x + 1)
{
cout << "In A::A x=" << x << endl;
}
operator int() const { return y; }
};
显式引用该成员。
(初始化程序列表遵循其自己的规则。)