`
javayestome
  • 浏览: 1030644 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

函数参数中const 引用 和 传值

 
阅读更多
#include <iostream>
using namespace std;

class Object
{
public:
Object(int i = 1) { n = i; cout << "Object::Object()" << endl; }
Object(const Object& a)
{
n = a.n;
cout << "Object::Object(const Object&)" << endl;
}
~Object() { cout << "Object::~Object()" << endl; }

void inc() { ++n; }
int val() const { return n; }

private:
int n;
};

void foo(Object a)
{
cout << "enter foo, before inc(): inner a = " << a.val() << endl;
//a.inc();
cout << "enter foo, after inc(): inner a = " << a.val() << endl;
}

int main()
{
Object a;

cout << "before call foo : outer a = " << a.val() << endl;
foo(a);
cout << "after call foo : outer a = " << a.val() << endl;

return 0;
}


可以进行测试便得知,传引用只需要调用构造函数一次,而传值需要2次。
分享到:
评论

相关推荐

    引用参数和传值参数的区别深入解析

    在C++中,还有一种常引用(const reference),它限制了函数对引用参数的修改,确保了参数的不可变性。常引用通常用于只读操作或者防止意外修改原始数据。 堆和栈是内存管理中的两个关键概念: - 栈区(Stack):...

    c++禁止函数的传值调用的方法

    C++ 中的函数调用方式有三种:传值调用、引用调用和指针调用。其中,传值调用是将实参的副本传递给函数体,会在栈上建立一个实参的副本,而引用和指针调用则不会建立副本。对于基本数据类型的变量,传值调用、引用...

    c++中拷贝构造函数的参数类型必须是引用

    原因:如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。...

    C 程序设计课件:第三章 函数.ppt

    函数参数的选取原则是只把对函数功能至关重要的变量作为参数,其他辅助变量应在函数内部定义。参数列表反映了函数的输入和输出,而函数体则描述了实现功能的具体过程。 函数的调用涉及参数传递,这可以是传值或传...

    面试中需要全面容易掌握的C++笔试题

    在C++面试中,笔试部分通常涉及语言的核心概念和技术细节,包括对象的生命周期管理、内存管理、类的设计、模板、异常处理等。本题重点讨论了C++中的一个重要特性——引用。 1. 引用的概念: 引用是C++中一个特殊的...

    c++学习资料关于“引用”的使用

    引用作为函数参数使用时,可以实现参数传递的"按引用"效果,即函数内部对参数的修改会影响到调用者。这与传值不同,传值会复制一份参数值,函数内部的修改不会影响到原始变量。 **9.5 返回多个值** 通过引用,函数...

    c++程序引用的基本语法.zip

    这使得引用成为C++中的一个强大特性,特别是在函数参数传递、操作符重载和STL容器中广泛应用。 1. 引用的声明: 在C++中,声明引用时需要同时初始化。语法结构如下: ```cpp type &reference_name = existing_...

    华为C++笔试题华为C++笔试题华为C++笔试题

    3. 引用作为函数参数:使用引用作为函数参数可以实现对实参的直接操作,避免了传值调用带来的额外开销。与指针类似,但引用更易读、更安全。传递引用给函数时,不复制实参,而是直接使用其内存地址。常引用(const ...

    c++常量引用-基础学习

    1. **函数参数**:在传递大型对象给函数时,常量引用可以避免复制对象带来的开销,同时防止函数内部修改对象。这被称为“传引用”而非“传值”。 2. **返回值**:函数返回常量引用可以告诉用户,函数不会返回一个新...

    C++面试试题

    在C++编程语言中,面试试题常常涉及到语言的关键特性,如引用、函数参数传递和返回值等。这里我们将深入探讨这些知识点。 首先,题目中给出的`func(x)`函数是用于计算整数`x`二进制表示中1的个数。函数通过`x = x&...

    数组参数学习内容

    在大多数编程语言中,数组参数有两种主要形式:传值和传引用。 1. **传值**:在这种方式下,函数接收到的是数组的一个副本,而不是原始数组的引用。这意味着对函数内部数组的任何修改都不会影响到原始数组。例如,...

    delphi对象参数调用

    在Delphi中,参数传递有两种方式:传值(by value)和传引用(by reference)。默认情况下,对象参数是按引用传递的,这意味着在函数或方法内部对对象的修改会影响到原始对象。例如: ```delphi procedure Modify...

    C++复习之面向对象的高级编程1

    参数传递有传值和传引用两种方式。传值可能导致拷贝开销,而传引用可以提高效率,特别是在传递大对象时。同时,传引用加const可以确保参数不会被修改。返回值传递也有值返回和引用返回。值返回适用于创建新对象,而...

    自考04737C++程序设计大纲1

    学习者需熟练掌握不同参数传递方式,如传值和传引用,理解默认参数和const保护数据的作用,深入探讨函数返回值的各种形式。内联函数、函数重载和默认参数的应用,以及函数模板的使用也是这一部分的重点。 第四部分...

    C++Primer第五版 第6章 函数(练习解答)

    2. **参数传递**:C++支持传值和传引用两种参数传递方式。传值意味着函数内部不能改变实参的值,而传引用则可以。传引用效率更高,因为不需要复制参数。例如: ```cpp void swap(int &a, int &b) { std::swap(a, b...

    学习C++需要了解的十八个基础知识.docx

    C++中的函数传值方式包括传值(值传递)和传引用(引用传递)。例如,`void fun(char &str)` 就是通过引用传递参数,这种方式可以实现原地修改参数值。此外,了解内存管理是C++编程的基础,包括静态存储区(如全局...

    摩托罗拉C++面试题

     如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。 一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的...

    C、C++面试题汇总(工作必备).pdf

    在C++编程语言中,面试题常常涉及到核心概念和技术,如引用、指针以及它们在函数参数和返回值中的应用。以下是对这些知识点的详细解释: 1. **引用的概念**: 引用是C++中一个独特的特性,它允许我们创建一个变量...

Global site tag (gtag.js) - Google Analytics