函数参数传递 赋值调用&引用调用&非常量引用调用

传值调用

函数的形参被初始化为实参的值的复制,这种传递参数的方式称为传值调用。

// compute the median of a `vector<double>'
// note that calling this function copies the entire argument `vector'
double median(vector<double> vec)
{
	typedef vector<double>::size_type vec_sz;

	vec_sz size = vec.size();
	if (size == 0)
		throw domain_error("median of an empty vector");

	sort(vec.begin(), vec.end());

	vec_sz mid = size/2;

	return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
}

 

引用调用

double grade(…, const vector<double>& chw) 

chw 为容纳double类型元素的vector的引用 所谓一个标识符是一个对象的引用(reference):此标识符为该对象的别名—— 亦即绰号。对引用的任何操作等同于对被引用对象的操作。

vector<double> homework;

vector<double>& hw = homework;

当函数的形参为引用时(引用调用),函数调用中对形参的访问就是对实参的访问(实际上还是使用指针实现的),系统不会复制实参的值至形参,避免了复制实参的开销,提高了运行效率。

 

 

非常量引用调用

读取家庭作业成绩

istream& read_hw(istream& in, vector<double>& hw)

若希望在函数中改变其实参,则必须定义形参为非常量引用类型,且必须爲其传递一个左值。

左值就是出现在赋值操作符(operator=)左边的变量,可以被赋值。右值是放在赋值操作符右边给其它变量赋值的变量或常量。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值