C++primer第4版第七章函数
2016-12-03 21:57
281 查看
Talk is cheap, show me the code.
求最大公约数gcd(the greatest common divisor)的最佳方法
函数使用引用形参通常有两个目的:
只是为了避免创建形参浪费存储空间:这种情况无需改变原有实参,所以应当采用const引用,比如 const string &s;
为了对原有实参产生影响:定义为string &s,这样可以传入的实参值产生影响。这种作用有一个很好应用:当函数需要返回多个值时,可以避免去创建包含多个元素的结构体,而是直接用形参引用的形式来传值。
函数形参中使用string引用有一个有意思的地方需要注意:不能用字符串字面值作为函数实参,不是引用却可以。
当将vector等容器作为函数形参时,太浪费空间,通常的做法是将容器的迭代器作为函数形参传入,或者使用引用。
当将数组作为函数形参时,编译器会对一维数组忽略数组长度,如果需要传入数组长度,需要额外指定数组长度,或者使用数组引用:
千万不要返回函数内定义的局部变量的引用或者指针,因为函数执行结束后会释放函数内变量使用的内存空间。
函数声明一般放在头文件中,而且函数声明一般会忽略形参变量名,所以可以不写形参变量名,函数声明时不用写花括号。
带默认形参的函数必须将有默认参数的形参放在参数列表后面,函数声明时也需要写出形参变量名和值。
仅当形参时引用或指针时,形参是否为const对重载函数区分才有影响。而且如果是指向变量的const指针和一般指针,也不能作为重载函数的区分。
函数指针可以隐式解引用和取地址:
求最大公约数gcd(the greatest common divisor)的最佳方法
int gcd(int v1, int v2) { while (v2) { int temp = v2; v2 = v1 % v2; v1 = temp; } return v1; }
函数使用引用形参通常有两个目的:
只是为了避免创建形参浪费存储空间:这种情况无需改变原有实参,所以应当采用const引用,比如 const string &s;
为了对原有实参产生影响:定义为string &s,这样可以传入的实参值产生影响。这种作用有一个很好应用:当函数需要返回多个值时,可以避免去创建包含多个元素的结构体,而是直接用形参引用的形式来传值。
函数形参中使用string引用有一个有意思的地方需要注意:不能用字符串字面值作为函数实参,不是引用却可以。
void show(string &s) //不能使用show("hello") { cout << s << endl; }
当将vector等容器作为函数形参时,太浪费空间,通常的做法是将容器的迭代器作为函数形参传入,或者使用引用。
当将数组作为函数形参时,编译器会对一维数组忽略数组长度,如果需要传入数组长度,需要额外指定数组长度,或者使用数组引用:
void fun(int (&a)[10]){} //可以传入数组长度10
千万不要返回函数内定义的局部变量的引用或者指针,因为函数执行结束后会释放函数内变量使用的内存空间。
函数声明一般放在头文件中,而且函数声明一般会忽略形参变量名,所以可以不写形参变量名,函数声明时不用写花括号。
带默认形参的函数必须将有默认参数的形参放在参数列表后面,函数声明时也需要写出形参变量名和值。
仅当形参时引用或指针时,形参是否为const对重载函数区分才有影响。而且如果是指向变量的const指针和一般指针,也不能作为重载函数的区分。
void fun(const int &a); void fun(int &a); //可以区分重载函数 void fun1(const int*a); void fun1(int *a); //可以区分重载函数 void fun2(int *const a); void fun2(int *a); //不能区分重载函数 void fun3(const int a); void fun3(int a); //不能区分重载函数
函数指针可以隐式解引用和取地址:
typedef bool (*fun)(const string &); bool fun1(const string &a); fun = fun1; //等价于fun = &fun1 const string a = "a"; fun(a); //等价于(*fun)(a)
相关文章推荐
- [1]【C++Primer】第七章 函数
- c++primer第七章函数7.31
- C和指针第七章——函数
- 第七章。指针和函数的关系
- C++ Primer Plus学习:第七章 函数-C++的编程模块(2)
- 第七章 php自定义函数实现代码
- 2012/1/19 《C++ Primer Plus》第七章:函数——C++编程模块 学习笔记
- 第七章 php自定义函数实现代码
- C++ Primer Plus学习:第七章 函数-C++的编程模块(3)
- 《C程序设计》第七章:函数
- 第七章 自定义函数
- delete与delete[]的区别【C++ Primer 第4版 18.1.3 operator new函数和operator delete接口】
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 读《C++Primer》 第四天 函数
- C++ Primer Plus学习:第七章 函数-C++的编程模块(1)
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 『C程序设计』读书笔记系列文章之第七章 函数
- 算法导论 第七章快速排序和两种swap函数实现方式比较
- C++ Primer Plus学习:第七章 函数-C++的编程模块(4)
- 2012/1/19 《C++ Primer Plus》第七章:函数——C++编程模块 学习笔记