C++中按值返回、返回指针与返回引用的区别是什么?
C++三种返回当前类对象方式的区别
1. 按指针返回 ReturnPointerToCurrentObject
- 返回值是指向当前对象的裸指针,操作的是原对象本身,无任何拷贝开销
- 必须提供const和非const两个重载版本:非const版本返回可修改原对象的普通指针,const版本返回禁止修改原对象的
const myclass*指针 - 语法层面存在空指针语义(即使这里返回
this必然非空,调用方仍可能做判空校验),适合需要传递对象指针、做指针运算的特殊场景,日常开发使用频率低于引用返回
2. 按引用返回 ReturnReferenceToCurrentObject
- 返回值是当前对象的左值引用,本质是原对象的别名,操作的是原对象本身,无任何拷贝开销
- 同样需要const和非const两个重载版本:非const版本返回可修改原对象的普通引用,const版本返回禁止修改原对象的
const myclass&引用 - 无需处理空指针语义,使用更直观安全,是最常用的返回形式,常用于重载赋值运算符、链式调用运算符(如
<<、+=)等场景
3. 按值返回 ReturnCopyOfCurrentObject
- 返回值是当前对象的全新拷贝,和原对象完全独立,后续修改返回值不会影响原对象
- 拷贝操作本身不会修改原对象,因此只需要提供const版本即可
- 会触发类的拷贝构造逻辑(部分场景下编译器可优化掉拷贝开销),适合需要获取独立对象副本的场景
内容的提问来源于stack exchange,提问作者Wynell
相关产品推荐
相关产品推荐

