C++ 一些参数传递技巧及建议及局部静态函数

参数传递:

1 只有正式参数是引用变量的时候,才是直接修改传递的变量,其他情况都只是传递一份copy(包括指针情况)。

引用参数不予许传递常量参数

void update(float& i);

void g(double d, float r)
{
update(2.0f); //  错误,不能是常量参数
update(r); // OK
update(d); // 错误,要求类型转换!
}

可以修改为void update( const float& i);就没问题了。第二个错误也不会出现了,这是编译器允许的。

2 对于数组,使用引用参数的主要目的是应用在模板中,这样可以从中推算出数组元素的数量:

我们一般传递数组参数都是用两个参数,数组名字和元素个数,但是如下面例子这样就不需要两个参数也可以传递数组了:

template<class T, int N> void f(T(&r)[N])
{
	// ...
}
	int a1[10];
	double a2[100];
void g()
{
	f(a1); // T is int; N is 10
	f(a2); // T is double; N is 100
}


如何传递参数呢?书中建议:
[1] Use pass-by-value for small objects.对于小对象(指int,double这些对象)使用值传递
[2] Use pass-by-const-reference to pass large values that you don’t need to modify.对于不需要修改的大值(指自定义的类对象)使用常量引用变量参数。
[3] Return a result as a return value rather than modifying an object through an argument.使用返回值优先于使用参数传递修改对象值。
[4] Use rvalue references to implement move  and forwarding 使用右值引用变量参数传递,执行移动和转发功能。右值参数传递如:void f(vector<int>&&);两个&号
[5] Pass a pointer if ‘‘no object’’ is a valid alternative (and represent ‘‘no object’’ by nullptr).要考虑无对象情况,那么使用指针,等于NULL代表无对象,C++11使用nullptr
[6] Use pass-by-reference only if you have to.必要时才使用引用变量参数传递。

3 使用局部静态函数:

好处是不会引起命名冲突,限制于局部使用,其他地方无法使用,而且有全局函数的行为特征。

#include<iostream>

using namespace std;

void f(int a) {   while (a--) {   static int n = 0; // initialized once   int x = 0; // initialized ’a’ times in each call of f()   cout << "n == " << n++ << ", x == " << x++ << '\n';  } } int main() {  f(3);  //cout<<n<<endl;这里无法访问n。  return 0; }

结果是:

n == 0, x == 0
n == 1, x == 0
n == 2, x == 0

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值