`
kmplayer
  • 浏览: 512695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款22:尽量使用pass-by-reference(传址),少用pass-by-value(传值)

 
阅读更多
1,对象的by value传递,实际上就是copy constructor.
例如:
Student returnStudent(Student s) { return s; }
Student plato;                      // Plato studied under Socrates
returnStudent(plato);               // call returnStudent
首先调用copy constructor将s初始化,然后copy constructor再次被调用,初始化返回值.
然后destructor s,还要destructor返回值.
这个什么也没做的函数,耗费的成本:两个copy constructor,两个destructor.
而且:Student内部的数据成员,也要继续...

2,
const Student& returnStudent(const Student& s)
{ return s; }
没有任何constructor或destructor被调用,效率大大提高.

3,by reference的另外一个优点,可以避免"切割".
by value方式下,当一个Derived传递个一个Base对象,所有Derived的特征将被切割,内部只剩下base class对象.
显然reference多态性,可以避免这种情况.

4,注意一个残酷的事实:
reference的底层,几乎都是以指针完成,所以传递一个小对象,如:char,by value可能比by reference更有效.
分享到:
评论

相关推荐

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

    1、为什么要宁以pass-by-reference-to-const 替换 pass-by-value 效率方面 缺省情况下,C++以by value 方式传递对象至(或来自)函数。 除非你另外指定,否则函数参数都是以实际实参的副本为初值,而调用段所获得的...

    delphi传址与传参的区别

    在Delphi编程语言中,函数调用时参数的传递方式主要分为两种:传值(Pass-by-value)和传址(Pass-by-reference)。这两种传递方式在实际编程中有着本质的区别,理解它们之间的差异对于编写高效、安全的代码至关重要...

    Effective C++(第三版)

    条款20:宁以pass-by-reference-to-const替换pass-by-value prefer pass-by-reference-to-const to pass-by-value. 条款21:必须返回对象时,别妄想返回其reference don't try to return a reference when you must ...

    js-pass-by-value-vs-pass-by-reference-arrays:测试Java中数组的按值传递与按引用传递

    通常,通过数组要比使用对象或类型化数组快。 我认为这可能与编译器优化有关。 我发现一个并发现按引用传递的字符串比按值传递的速度快30倍。 使用此信息,我创建了一个字符串数组以查看是否有区别。 通常,通过...

    Effective C++ 中文版

    条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明为private 条款23: 宁以non-member、non-friend替换member函数 条款24:若...

    c#几个区别传值和传址的好例子

    **传值(Pass by Value)** 在C#中,基本类型(如int、double、char等)和结构(struct)的参数传递默认是按值传递。这意味着当一个变量作为参数传递给方法时,实际传递的是该变量值的一个副本。任何在方法内部对这...

    js代码-函数调用的传值和传址

    传址调用(Pass by Reference)** 对于引用类型的变量,函数调用时是按引用传递。这意味着传递的是对象引用(地址),而不是实际的对象副本。因此,函数内部可以通过这个引用改变对象的属性,即使这些改变在函数...

    PHP传参之传值与传址的区别

    传值(Pass by Value)是默认的参数传递方式,意味着当函数参数通过值传递时,实际上传递的是参数值的一个副本给函数。因此,即使在函数内部对这个副本做了修改,原始数据也不会受到影响。在函数外部,原变量的值...

    phpini.txt

    - **allow_call_time_pass_reference** - 默认值:`On` - 功能:控制是否允许在函数调用时传递引用。 - 注意:此功能在 PHP 5.4 及更高版本中已被弃用,建议不要使用。 #### 总结 `php.ini` 文件是 PHP 运行环境...

    EC.zip_eC_inheritance

    Between pass-by-value and pass-by-reference? It is important to get these decisions right at the outset, because an incorrect choice may not become apparent until much later in the development ...

    实验8-学号-姓名-新.docx

    - C语言中函数间参数传递有两种基本方式:传值(pass-by-value)和传地址(pass-by-reference)。 - 传值是指将实参的值复制给形参;传地址则是将实参的地址传递给形参。 3. **掌握函数声明**: - 函数声明告诉...

    关于函数返回值的讨论

    在C语言中,函数参数有两种主要的传递方式:传值(pass-by-value)和传址(pass-by-reference)。 1. **传值**:函数接收的是参数的副本,对参数的修改不会影响到实际参数。 2. **传址**:函数接收的是参数的地址,...

    Fortran面试题.pdf

    - **按引用传递(Pass-by-reference):** 传递的是变量的引用,修改将反映到原始变量上。 2. **接口(Interface)的作用及使用:** - **接口:** 用于定义子程序或函数的通用形式,支持过载。 - 示例: ```...

    Python 2.4 Quick Reference Card

    - 变量和函数使用小写字母,单词间用下划线分隔。 - 类名首字母大写。 **对象与名称** - **引用计数**: 每个对象都有一个引用计数,用于追踪有多少变量指向该对象。 - **可变与不可变对象**: - 不可变对象包括...

    总结函数传值方式

    #### 一、传值(Pass by Value) 当函数通过传值方式接收参数时,实际上是在函数内部创建了一个局部变量来存储传入参数的副本。这意味着任何对这个局部变量所做的修改都不会影响到原始数据。这种方式最简单直观,...

    02-pass-w-d-simoneLentini

    在Java编程中,"passing with default" 或 "pass by reference vs pass by value" 是一个常见的讨论话题。Java中所有的参数传递都是按值传递,这意味着当你将一个变量传递给方法时,方法接收的是该变量当前值的一个...

    k7 SRIO参考例程

    - Messaging packets providing incorrect treq_byte_count value - Version fixed : v4.4 - CR#467116 / AR#30320 - Modified Logical Layer to properly decode Messaging size field. Modified testbench to ...

Global site tag (gtag.js) - Google Analytics