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

Core List

1. pass-by-value 相对于 pass-by-reference-to-const 的劣势

(1) copy 效率低

bool checkHealth(Student s);

Student boxi;

bool is_boxi_ok = checkHealth(boxi);

注:

a. 代码执行中,将调用拷贝构造函数,使用已存在student 对象 boxi,初始化形参对象 s。

b. 在函数调用完成后,将调用 student 的析构函数,释放对象s。(若使用pass-by-reference-to-const 则不会新创建对象,即无构造函数和析构函数的调用)

c. 由于 pass-by-value 中,函数操作的是实参的副本,不会影响实参,因此,在 pass-by-reference-to 时,为避免实参被修改,因此添加 const 修饰符。


(2) 对象被切割

class Base {

public:

    virtual void display() const;

};

class Derived :: Base {

public:

    virtual void display() const;

};

void print (Base b) {

    b.display();

}

Derived d;

print (d);    //  调用的是基类的 display 函数,因为产生的是基类的对象 b, 该b 是由实参d 的基类部分成员变量初始化的。


2. “拷贝成本低” 的错误理解

(1) “小对象” : 许多对象内涵的东西只比一个指针多一些,但复制这种对象缺需承担“复制哪些指针所指的每一样东西”。

(2)“用户自定义类型” :编译器对待“内置类型”和“用户自定义类型”的态度截然不同,纵使两者拥有相同的底层表述。

(3) 自定义类型当前小,之后可能会变得很大。


3. 优先使用 pass-by-value 的情况

(1) 内置类型

(2) STL迭代器(本身为指针)

(3) 函数对象(本身为指针)

注:pass-by-reference-to-const 的底层为指针的传递,因此对于对象自身即为指针时,可直接使用pass-by-value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值