碰到这么个程序,开始一直对结果不理解,现在终于弄懂了
#include <iostream>
using namespace std;
struct A
{
static int x;
int y;
int z;
public:
operator int()
{
return x-y;
}
A operator ++(int)
{
return A(x++,y++);
}
A(int x=1,int y=2)
{
A::x=x;
A::y=y;
}
};
int A::x=23;
int main()
{
int i;
A a(4,3);
cout<<"a.x"<<a.x<<" a.y"<<a.y<<endl;
i=a++;
cout<<"a.x"<<a.x<<" a.y"<<a.y<<endl;
return 0;
}
输出为 a.x4 a.y3
a.x4 a.y4
1、A a(4,3); 会调用构造函数,a.x=4(A::x=4),a.y=3;
2、i=a++; 会调用A operator ++(int){return A(x++,y++);}
调用构造函数时的值传递 函数值传递,相当于赋值操作,调用构造函数时实参赋值给形参的具体操作应该是x=x++,y=y++,
左值的x为4,左值的y为3,而右值的x为右值的y为4。
3、构造构造调用 这里就需要注意了,这儿会生成一个新的对象,因为调用了A的构造函数,我们姑且叫作生成这个对象为b,由于X的值是共享的,
所以b可以改变X的 值,A::x = 4,所以X的值为4,但是A::y = y这个就改变不了y的值了,这儿的赋值,意思是b.y = 3,而对象a.y的值当然没变仍然是4.