Heres the link to code and the error

我不明白为什么return (const C&)cc;行不起作用。

这是代码和错误的粘贴

#include <stdio.h>

class C
{
public:
    int i;
    explicit C(const C&)   // an explicit copy constructor
    {
        printf("\nin the copy constructor");
    }
    explicit C(int i )   // an explicit constructor
    {
        printf("\nin the constructor");
    }

    C()
    {
        i = 0;
    }
};

class C2
{
public:
    int i;
    explicit C2(int i )   // an explicit constructor
    {
    }
};

C f(C c)
{   // C2558
//    c.i = 2;
//    return c;   // first call to copy constructor
C cc;
return (const C&)cc;
}

void f2(C2)
{
}

void g(int i)
{
//    f2(i);   // C2558
    // try the following line instead
     f2(C2(i));
}

int main()
{
    C c, d;
    d = f(c);   // c is copied
}

输出:

最佳答案

调用显式copy-constructor的示例:

  • http://ideone.com/bV4S7
  • http://ideone.com/G0OYi

  • 当然,按值传递和按值返回总是隐式调用复制构造函数,因此显式声明复制构造函数将防止这种情况发生(不一定是一件坏事)。

    关于c++ - 为什么我不能调用 'explicit C(const C&)'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5071963/

    10-11 18:35