参数的常量引用const int &a和引用 int &a的区别
来源:互联网 发布:淘宝宝贝尺码自定义 编辑:程序博客网 时间:2024/06/07 14:10
首先介绍一下为什么我们要使用引用形式进行参数传递。
我们写一个函数 void fun(int a,int b),这样的函数调用时是不会改变参数的值的,在函数中也就是以一个局部变量的形式存在,当函数结束时,变量a,b的生命周期也就结束了。
而对于 void fun(int &a,int &b),这种形式进行参数传递,其实是一种指针的形式,如果在函数内我们改变了a,b的值,当函数结束后,原来的值也将被改变。
我们写一个函数 void fun(int a,int b),这样的函数调用时是不会改变参数的值的,在函数中也就是以一个局部变量的形式存在,当函数结束时,变量a,b的生命周期也就结束了。
而对于 void fun(int &a,int &b),这种形式进行参数传递,其实是一种指针的形式,如果在函数内我们改变了a,b的值,当函数结束后,原来的值也将被改变。
当参数是较大的数据结构类型时,而且我们不需要改变原变量中的值,那么我们为什么要使用void fun(vector<int> &a),而不使用void fun(vector<int> a)呢,因为void fun(vector<int> a)需要对原变量进行一次复制操作,即使两个变量名是相同的由于作用域不同,所以其实是两个变量,所以需要一次复制操作,因此当数据大小较大时是非常浪费时间的。
那么自然的就引出了这样的问题,我们使用void fun(vector<int> &a)不需要进行复制操作,但是不小心在函数中改变了参数的值不就得不偿失了。所以就有了void fun(const vector<int> &a)这样的结构,我们都知道const关键字定义的变量是不可以被改变的,所以当我们进行常量引用时既不会进行复制操作,当误操作时又不能编译通过,两全其美。
阅读全文
0 0
- 参数的常量引用const int &a和引用 int &a的区别
- C++ 常引用 const int &a 的作用和区别
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
- c++中常引用const int &a的介绍
- (int&)a和(int)a, (int)&a, &a的区别
- const int a; int const a; const int *a; int * const a; int const * const a ; const int * const 之间的区别
- 关于const的问题 const int *a; int const *a; int *const a; 的区别
- const int a与int const a的区别
- const int *a 与int *const a的区别
- const int *a 与 int *const a的区别
- const int *a and int *const a and const int * const a 的区别
- const int *a与int *const a,const int *const a的区别
- const int *a与int *const a,const int *const a的区别
- (int&)a和(int)a的区别
- (int&)a和(int)a的区别
- (int&)a和(int)a的区别
- (int&)a和(int)a的区别
- Mybatis结合Oracle的foreach insert批量插入
- 不同app之间activity的启动调用传值
- oracle死锁语句查询 以及杀掉死锁数据库进程
- mongodb 3.4更新数据java.lang.IllegalArgumentException: Invalid BSON field name age
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- 参数的常量引用const int &a和引用 int &a的区别
- jq中$()对html元素选择总结
- Java 抽象类和接口的联系与区别
- 二叉树的层次遍历
- http和socket之长连接和短连接区别
- Android7.0 MTK 需求文档(二)
- Java中的线程池的集中管理和监控
- Could not resolve dependencies for project : Failure to find jar was cached in the local reposit
- RxJava2 / RxAndroid2操作符distinct与distinctUntilChanged去重结果异同