C++中的参数传递机制(包含C++ 11 新特性)

1.传值调用

double average(double a, double b);   //返回a和b的平均值
//传值调用的理想用法
double z = average(x,y);
//无效情况
void swap(double a,double b);
swap (x,y)   //传值调用并不会改变x和y的值,因为传值引用先复制,再运算

2.传引用调用(传左值引用调用)

//为解决传值引用的无效情况
void swap(double & a, double & b);
swap(x,y);  //改变x,y的值

3.传对常量引用的调用(传常量引用调用)

string randomItem(vector <string> arr) //返回arr中的一个随机项
/*问题所在:
*存在拷贝行为,开销较为昂贵,但理论上不需要改变arr中的值,不需要拷贝
*/
//解决办法:传对常量的引用调用
string randomItem ( const vector<string> & arr)
//在这种情况下调用randomItem(vec)的时候 vec与arr同义,所以不用复制,而它又是const的。所以不能修改
//本质上提供了与传值调用可见的相同行为。

4.传右值引用调用(C++ 11 新特性)

核心概念:
右值存储的是要被销毁的临时量,当遇到x=rval的时候(rval是一个右值)可以通过move而不是复制进行实现。移动一个对象要比复制一个对象容易得多

//实现前面随机返回arr中的项(采用右值引用)
string randomItem(vector <string> && arr);
cout<<randomItem( { ''hello",''world"})<<endl;   //调用右值的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值