Effective C++之条款20:宁以pass-by-reference-to-const替换pass-by-value
声明:
- 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。
- 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。
条款20:宁以pass-by-reference-to-const替换pass-by-value
Prefer pass-by-reference-to-const to pass-by-value.
函数pass-by-value参数都是以实际实参的拷贝为初值,这些拷贝是有对象的copy构造函数执行的,可能使得pass-by-value成为昂贵的费时操作。
通过pass-by-reference-to-const就可以回避所有的构造函数和析构动作了。
以pass-by-value方式传递参数可能导致slicing(对象切割)问题。当一个derived class对象以by-value方式传递给一个参数类型为base class对象,derived class对象会被视为 base class对象,而derived class的所有特化信息都会被切除。通过pass-by-reference方式可以解决slicing问题。
从C++编译器底层来看,references往往以指针实现出来,pass-by-reference通常意味着真正传递的是指针。
请记住:
- 尽量以pass-by-reference-to-const来代替pass-by-value,前者通常比较高效,并可以避免切割问题。
- 以上规则并不适用于内置类型以及STL迭代器和函数对象,对它们而言,pass-by-value往往比较适当。
Effective C++之条款20:宁以pass-by-reference-to-const替换pass-by-value相关推荐
- Effective C++条款20解读:宁以pass by reference to const替换pass by value
我们先来看一个简单的程序: #include <iostream> using namespace std;class A { private:string name;string add ...
- 条款20 :宁以pass-by-reference-to-const 替换pass-by-value
缺省的情况下,C++是以by value方式传递对象至函数.函数实参都是以实际实参的复件为初始值,而调用端获得的亦是函数返回值的一个复件.这些复件系由对象的copy构造函数产出,这可能使得pass b ...
- Effective c++学习笔记条款20:宁以 pass-by-reference-to-const替换pass-by-value
Prefer pass-by-reference-to-const to pass-by-value 这个问题在在C++是非常常见的.传值和传引用巨大的差别在于你所使用的参数是其本身还 ...
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
条款20:宁以pass-by-reference-to-const替换pass-by-value 缺省情况下C++是以by value 传递的.其副本是对象本身的copy 构造函数自动调用的. cla ...
- [C++学习] effective c++ 笔记 pass by value ,pass by reference
在编写函数的返回值和形参的时候,能 传引用(pass by reference) 就不要 传值 (pass by value). 这样是为了少调用 copy constructor ,可以提高效率. ...
- pass by value 与pass by reference 小结
缺省条件下,c++都是以pass by value形式传递函数参数的,而值传递的参数,编译器知道这个参数收到保护,不会修改其值,实际上修改的都是通过拷贝构造函数另外创建的参数副本,当函数返回时还要调用 ...
- Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value
Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to p ...
- Effective C++ 50条款
Effective C++ 50条款 条款 1:尽量用 const 和 inline 而不用#define--尽量用编译器而不用预处理 #define max(a,b) ((a) > (b) ? ...
- 《Effective STL》条款解读
条款01:慎重选择容器类型 vector.list和deque有着不同的复杂度,vector是默认使用的序列类型.当需要频繁在序列中间做插入和删除操作时,应使用list.当大多数插入和删除操作发生在序 ...
最新文章
- 服务器温度3d显示,智能问答助手、3D可视化展示,腾讯医典“黑科技”助力科普更有温度...
- 单链表-删除单链表L中第一个值为x的结点的前驱结点(三指针法)
- STC15分时内核中函数指针的使用问题
- View-屏幕坐标 Content-网页(内容)坐标 mScrollX和mScrollY-屏幕坐标偏移
- postgresql主从备份_PostgreSQL主从流复制与手动主备切换架构
- 固特异发布人工智能球形轮胎:自动变形、自我修复、超级灵活
- 小波滤波器与其他滤波器的区别_滤波器国产 VS 国外
- c语言输入字符串smallbig,为什么输出不了small,这里big和small都是一样的操
- 虚继承中的构造函数的调用
- arm linux vlc移值,vlc-3.0.8在飞凌开发板i.mx6q上移植
- appcan 开发步骤
- 使用 window.open 打开新窗口
- service mesh解决的几个问题
- 52PJ官网 基础教程第二课的分享(OD)_Part1
- 【C#】基础篇(2) C#实现串口助手,C#扫描串口
- [MacBook Pro] 错误提示zsh_ command not found_ brew
- 2021年 - 年终总结
- 学计算机去旧金山,旧金山大学的计算机专业如何?
- 利用VARNA来画tRNA的二级结构
- 安装vfp9遇到的问题