当我修改复制构造函数做一些奇怪的事情,然后通过值将一个(该类的)对象传递给函数时会发生什么?

pur*_*uck 1 c++ pass-by-value

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.当我将类的对象传递给函数时会发生什么?

编辑:在程序中看起来似乎很棘手......

Ben*_*igt 8

可以调用复制构造函数,在这种情况下会发生奇怪的行为.

或者,编译器可能会忽略该副本(这是标准特别允许的),从而打破了您的期望.在这种特殊情况下是不允许的,但在很多情况下都是如此.

所以不要编写做奇怪事情的复制构造函数.(否则我们会打电话给你auto_ptr)