Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用;这";作为复制构造函数的参数 我有一个C++类,我们称之为C,我想在其中一个方法中使用隐式复制构造函数,例如: c c::do_something() { c copy = this; //I want implicit copy constructor here! copy.something_else(); //........// return copy; }_C++ - Fatal编程技术网

使用;这";作为复制构造函数的参数 我有一个C++类,我们称之为C,我想在其中一个方法中使用隐式复制构造函数,例如: c c::do_something() { c copy = this; //I want implicit copy constructor here! copy.something_else(); //........// return copy; }

使用;这";作为复制构造函数的参数 我有一个C++类,我们称之为C,我想在其中一个方法中使用隐式复制构造函数,例如: c c::do_something() { c copy = this; //I want implicit copy constructor here! copy.something_else(); //........// return copy; },c++,C++,但是,gcc返回此错误: 错误:从“c*const”到“long unsigned int”的转换无效 (我有另一个来自long unsigned int的构造函数) 。。。就好像复制构造函数不存在一样。我做错了什么?这是指向对象的指针,所以它应该是 c copy = *this; 哇,哇!另外,不要混淆复制构造函数和复制赋值运算符 c copy (*this); 是复制构造函数 c copy = *this; 是复制分配运算符。尽管复制构造函数在技术上更有效,尽管复制赋值操作符通常经过优

但是,gcc返回此错误:

错误:从“c*const”到“long unsigned int”的转换无效

(我有另一个来自long unsigned int的构造函数)

。。。就好像复制构造函数不存在一样。我做错了什么?

这是指向对象的指针,所以它应该是

c copy = *this;

哇,哇!另外,不要混淆复制构造函数和复制赋值运算符

c copy (*this);
是复制构造函数

c copy = *this;
是复制分配运算符。尽管复制构造函数在技术上更有效,尽管复制赋值操作符通常经过优化以完成相同的任务,但两者都可以工作



哇-我发现自己被纠正了。在与变量声明相同的语句中使用=运算符确实会调用复制构造函数。你每天都能学到新东西

这是一个很好的旁白,但它并不适合评论,而且似乎存在一些分歧。尝试这段代码,了解何时调用复制构造函数和赋值运算符:

class A
{
public:
    A() { cout << "A::A()\n"; }
    A(const A &) { cout << "A::A(const A &)\n"; }
    void operator =(const A &) { cout << "A::operator=(const A &)\n"; }
};

int main()
{
    A a; // default constructor
    A copy = a; // copy constructor (and no assignment operator)
    A copy2(a); // copy constructor (and no assignment operator)
    a = copy; // assignment operator
    A function(); // declares a function return A
    A b = A(); // default constructor (but no assignment operator)
    A b2 = A(a); // copy constructor (but no assignment operator)
}
A类
{
公众:

A(){cout这实际上是在使用默认构造函数,然后是赋值运算符,而不是复制构造函数。请参见Matt的回答。安德鲁:我不确定-下面是Josh(和一些站点)说opposite@Andrew不,它使用复制构造函数。A= B;实际上不会调用默认的CtoR+赋值操作符。在这种情况下,调用的拷贝CtoR不仅仅是(如CaseTalk),但是你将永远不会得到默认的CtoR+赋值操作符。参见C++标准中的拷贝初始化。;与c copy=*此相同;(前提是*此为c类型)两者都调用复制构造函数。c copy;copy=*this;调用默认构造函数,然后调用赋值运算符。这不仅仅是效率问题……复制构造函数和赋值运算符可以是完全不同的函数。为了完整性,可以添加一个构造函数“a(int)”,然后显示“a=10;”相当于:“A(A(10))”。