C++中按引用传递参数的好处有哪些

 更新时间:2024年01月01日 09:58:26   作者:doubleslow;  
这篇文章主要介绍了C++中按引用传递参数的好处有哪些,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++按引用传递参数的好处

pass by reference

对于数组和结构这种大的数据,按值传递(pass by value)需要创建副本,占内存费时间,使用引用就只传地址,和按指针传递一样,但是使用起来又比指针简单安全,就是在使用原数据。

对于unique_ptr智能指针模板类,它只允许源指针是临时右值时候的赋值,所以如果实参不是临时右值,按值传递就会成为非法赋值,编译器报错。

示例

#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include <algorithm> //for_each函数
using std::string;
using std::cout;
using std::cin;
using std::endl;
std::unique_ptr<int> make_int(int n)
{
	return std::unique_ptr<int> (new int(n));//返回int的智能指针,用传入的参数n初始化
}
void show(std::unique_ptr<int>  & a)//这里必须按引用传递,因为如果按值传递
//那么就要用一个非临时右值作为a的实参,对于unique_ptr类是不允许的
{
	cout << *a << ' ';
}
int main()
{
	int size = 5;
	std::vector<std::unique_ptr<int>> vp(size);
	for (int i=0;i<size;++i)
		vp[i] = make_int(rand() % 1000);
	vp.push_back(make_int(rand() % 1000));//可以调用成功是因为参数是一个临时右值
	for_each(vp.begin(), vp.end(), show);
	return 0;
}

41 467 334 500 169 724
Process returned 0 (0x0)   execution time : 0.329 s
Press any key to continue.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++中std::sort函数介绍和使用场景

    C++中std::sort函数介绍和使用场景

    std::sort函数是C++标准库中常用的排序函数之一,它可以对各种类型的序列进行排序,本文就来介绍一下C++中std::sort函数介绍和使用场景,感兴趣的可以了解一下
    2024-02-02
  • C++中继承基类与派生类的区别

    C++中继承基类与派生类的区别

    这篇文章主要介绍了C++中继承基类与派生类的区别,面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易,需要的朋友可以参考下
    2023-05-05
  • C指针原理教程之AT&T汇编

    C指针原理教程之AT&T汇编

    AT&T 汇编是一种和intel汇编在语法上完全不同的汇编语言,为避免混淆intel语法,本文只介绍AT&T汇编,AT&T的第一个特点就是每个寄存器名前必须加‘%’,立即数前必须加‘$’
    2019-02-02
  • C++中按引用传递参数的好处有哪些

    C++中按引用传递参数的好处有哪些

    这篇文章主要介绍了C++中按引用传递参数的好处有哪些,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解C++中new运算符和delete运算符的使用

    详解C++中new运算符和delete运算符的使用

    这篇文章主要介绍了C++中new运算符和delete运算符的使用,文章来自于微软开发者文档,因而根据Visual C++的一些特性来进行讲解,需要的朋友可以参考下
    2016-01-01
  • C语言中.c和.h文件区别讲解

    C语言中.c和.h文件区别讲解

    这篇文章主要介绍了C语言中.c和.h文件区别讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是本文的详细内容,需要的朋友可以参考下
    2021-07-07
  • C++ 继承详解及实例代码

    C++ 继承详解及实例代码

    这篇文章主要介绍了C++ 继承详解,这里整理了详细的资料及实例代码,有需要的小伙伴可以参考下
    2016-09-09
  • 在matlab中实现for循环的方法

    在matlab中实现for循环的方法

    for循环用来循环处理数据,break用于终止离它最近的一层for循环,continue用于跳过离它最近的一层for循环,接着执行下一次循环,本文重点给大家介绍在matlab中实现for循环的方法,感兴趣的朋友一起看看吧
    2021-11-11
  • C语言中的冒泡排序问题

    C语言中的冒泡排序问题

    这篇文章主要介绍了C语言中的冒泡排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C++超集C++/CLI模块的基本类型

    C++超集C++/CLI模块的基本类型

    这篇文章介绍了C++超集C++/CLI模块的基本类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论