class C
{
public:
C(C& c)
{
i = c.i;
j = 100;
}
C() : i(0), j(0)
{
}
int i, j;
};
C func(C c)
{
return c;
}
int main()
{
C c;
c = func(c)
// What is the value of j?
}
Run Code Online (Sandbox Code Playgroud)
上面是一个具有不寻常的复制构造函数的类.它不是复制i和j,而是复制i并将其他东西分配给j.当我将类的对象传递给函数时会发生什么?
编辑:在程序中看起来似乎很棘手......
可以调用复制构造函数,在这种情况下会发生奇怪的行为.
或者,编译器可能会忽略该副本(这是标准特别允许的),从而打破了您的期望.在这种特殊情况下是不允许的,但在很多情况下都是如此.
所以不要编写做奇怪事情的复制构造函数.(否则我们会打电话给你auto_ptr)