Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value

本文探讨了C++中值传递与按const引用传递的效率和副作用,指出按const引用传递能提高效率并避免对象切片问题。值传递因涉及对象复制和析构,效率较低。按const引用传递则无此问题,同时防止对象状态被修改。内置类型和STL迭代器等特殊情况仍推荐传值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


《Effective C++》是一本轻薄短小的高密度的“专家经验积累”。本系列就是对Effective C++进行通读:


条款20:宁以pass-by-reference-to-const替换pass-by-value

1、值传递影响效率的原因

  缺省情况下,C++以传值的方式向函数传入或者从函数传出对象。除非你另外指定,否则函数参数都会以实际参数值的复件(副本)为初值,这些副本都是由对象的拷贝构造函数产出。这使得按值传递(pass-by-value)变成一项昂贵的操作。

值传递为什么会造成代码执行效率低?因为传值调用的时候,是传递对象的一个副本,因此是调用对象的拷贝构造函数将对象复制一份,然后传递给函数。效率比较低。

  举个例子,考虑下面的类继承体系:有一个基类(Person)与一个派生类(Student),并且定义一个函数(validateStudent),参数接受一个Student对象(传值调用)

class Person {
   
public:
    Person();
	virtual ~Person();
private:
    std::string name;
    std::string address;
};
 
class Student :public Person {
   
public:
    Student();
    ~Student();
private:
    std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写Bug那些事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值