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