`
bcyy
  • 浏览: 1823378 次
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    C++函数和数组

    掌握函数参数传递的机制;掌握全局变量、局部变量、静态变量的使用方法;掌握函数重载的方法。 2.熟练掌握一维数组和二维数组的定义、引用和初始化;掌握字符数组与字符串的关系以及字符串变量的表示,熟练字符串...

    C++编程思想 例子和叙述讲解C++编程

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    现代C++程序设计

    6.3.3 向函数传递数组:最开始的引用调用 6.3.4 利用数组和函数生成随机数并进行排序 6.4 C字符串,也称为字符数组 6.4.1 字符数组的初始化 6.4.2 null字符 6.4.3 C字符串的输入 6.4.4 C++中提供的字符数组函数 ...

    C++编程思想 编程

    C++编程思想,目 录 译者序 前言 第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:类型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 1.2.1 较好的C 3 ...

    C++编程思想.pdf

    C++编程思想 目 录 译者序 前言 第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:类型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 1.2.1 较好的C 3 ...

    C++高级参考手册 完全自学 内容详细 讲解通俗易懂

    第5章 函数重载与缺省参数 5.1 范围分解 5.1.1 用返回值重载 5.1.2 安全类型连接 5.2 重载的例子 5.3 缺省参数 5.4 小结 5.5 练习 第6章 输入输出流介绍 6.1 为什么要用输入输出流 6.2 解决输入输出流问题...

    新手学习C++入门资料

    为了避免这样的警告,C++允许声明一个无名形参,以告诉编译器存在该参数,且调用者需要为其传递一个实际参数,但是函数不会用到这个参数。下面给出使用了无名参数的C++函数代码: int fun(int x,int) //注意不同点...

    C++ 语言 详细教程电子版

    本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流...

    C++的概念/解释,可打印,华南师范大学C++考过。

    自己整理的C++要背的一些概念,华南师范大学考c++的建议看看,21届考研有考到哦!!(可打印版) 1. 面向对象的三个基本特征 4 2. 抽象 4 3. 如何实现多态性 4 4. const与define的区别 4 5. static作用 4 6. 静态...

    c++ 编程思想 (高清pdf)

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    Thinking in C++高清版

    关于C++开发思想的一本经典之作 目 录 译者序 前言 第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:类型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 ...

    C++ 编程思想 打印版 pdf

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    C++编程思想 PDF版 电子书

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    C++编程思想 打印版 pdf

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    C++编程思想(用简单的例子和简练的叙述讲解C++编程)

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    C++编程思想(中文版) chm

    本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流...

    免费下载:c++编程思想(中文)

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

    C++编程思想 thinking in C++

    C++编程思想,非扫描版pdf电子书 目 录 译者序 前言 第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:类型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 ...

    C++编程思想

    第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全类型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 ...

Global site tag (gtag.js) - Google Analytics