C++参数类型的合理选用
前言
- 在传统C++中, 函数的参数类型主要有三种:
传值
、传指针
和传引用
- C++11开始,多了一种叫做
右值引用
的类型,以及一些智能指针类型(shared_ptr
、weak_ptr
、unique_ptr
)
各参数类型的最佳适用场景
传值
- 传值开销 比 传指针和引用开销更小,如:
char
比char *
和char &
占用内存更小 - 函数内部明确需要参数的副本
传指针
- 结构体,体积较大,并且设计到不通类型的地址转换
- 内存字节操作
- 参数需要分为空与非空
- 多个对象内存连续
传引用
- 单个对象,体积较大
- 需要对参数对象做修改
- 函数内明确不能使用空对象
传右值引用
- 需要将参数对象的所有权转移
传智能指针
- 需要区分空与非空,并且设计对象生命周期管理的,如:
当参数对象需要共享时,使用
shared_ptr
当参数对象需要独占,只能进行转移时,使用unique_ptr
参数中不使用weak_ptr
,weak_ptr
仅用于共享对象之间的互相引用解决引用环
const约束
- 当参数明确表示函数内部不会进行修改时,无论是引用类型参数还是指针类型参数,都应该加上
const
约束,如:
void funcRef