C++中赋值运算操作符和=重载有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中赋值运算操作符和=重载有啥区别?相关的知识,希望对你有一定的参考价值。

参考技术A 重载赋值运算符和复制构造函数 貌似效果一样。重载赋值运算符,书写方便一些。使用const 是为了防止常量意外被修改,其实程序编译后 使用const 的和没有使用const的汇编代码一样的。论坛的教程从汇编层面讲解 认识C++ 值得一看。

c++ 拷贝构造函数与赋值运算符重载函数的区别是

复制构造函数接受单个类类型引用形参,这个形参一般用const修饰。
class A
public:
A();;
A(const A&);
//.........
;
一般的类,编译器合成的构造函数就能完成必要的工作。担当类有一个数据成员是指针,或者成员表示在构造函数中分配的其他资源;在创建新对象时必须做一些特定工作。这两种情况必须定义复制构造函数。

复制操作符重载,由operator后面跟所定义的操作符符号,通过定义名为operator=函数来对赋值进行定义。该操作符函数有两个形参:第一个形参对应左边的操作数(隐式绑定到this指针了),第二个形参对应右操作数。返回类型应该与内置赋值运算返回的类型相同,内置类型的赋值运算返回对右操作数的引用,赋值操作符也返回对同一类型的引用。
class B

public:
B& operator=(const B &);
;

可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。

OK……
参考技术A 简单的来说是,拷贝构造函数是用一个已存在的对象去构造一个不存在的对象(拷贝构造函数毕竟还是构造函数嘛),也就是初始化一个对象。而赋值运算符重载函数是用一个存在的对象去给另一个已存在并初始化过(即已经过构造函数的初始化了)的对象进行赋值。 它们定义上的区别,楼上的已经说过了。

以上是关于C++中赋值运算操作符和=重载有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

c++中拷贝构造函数和赋值运算符重载本质上一样么

c++重载赋值操作符的返回值是啥?

C++ 继承多态关系中的赋值运算符的重载=operator()

C++ 继承多态关系中的赋值运算符的重载=operator()

C++类的默认函数

C++进一步认识类与对象