我正在尝试通过在线教程学习C ++ OOP概念,在那里我遇到了一个说明运算符重载的代码片段。
代码如下所示:
class MyClass{
int var;
public:
Myclass(int value=0){
var = value;
}
Myclass operator+(Myclass &obj){
Myclass newobj;
newobj.var = this->var + obj.var;
return newobj;
}
};
假设我在main函数中调用运算符,如下所示:
int main(){
...
obj3 = obj2 + obj1;
...
}
在早期的Classes教程中,我读到了为什么复制构造函数要求所有参数都通过引用传递,因为它们本身就是如何复制两个类对象的定义。因此,据我所知,当必须复制类的对象时,复制构造函数是必须的。
在上面的代码片段中,我觉得编译器会尝试将newobj的值“复制”到main()函数(obj3)中的L_value上。但是如果没有定义复制构造函数,这怎么可能呢?我在这里误解了什么吗?
感谢您的帮助!
答案 0 :(得分:0)
http://en.cppreference.com/w/cpp/language/copy_constructor#Implicitly-declared_copy_constructor
如果您使用的是标准C ++ 2003或更旧的复制构造函数,则始终为任何类T
隐式定义(由编译器生成),除非:
如果您使用的是标准C ++ 2011或更新的复制构造函数,则始终为任何类T
隐式定义(由编译器生成),除非:
还要记住
a = b;
主要不是调用copy-constructor而是 copy-assignment 。如果您的类合适,那么反过来也会隐式定义(自动生成)。