标签:程序 namespace 语法 调用 一段 内联函数 bsp and int
看下面的max函数
//返回两数间的最大值 int max (int num1, int num2) {//比较num1和num2 if (num1 >= num2) {
return num1;
} else {
return num2;
} }
如果我们想要比较两个浮点数的最大值,那么我们就不能使用max()这个函数了。可实际上max就是返回最大值的意思,应该实现所有数据类型的比较,这时候就要用到函数重载。
函数重载,就是改变函数的参数列表而不改变函数名,以实现不同的参数传入。见下面的代码
#include <iostream> using namespace std; //返回两数间的最大值 int max (int num1, int num2) { //比较num1和num2 if (num1 >= num2) { return num1; } else { return num2; } } //返回两数间的最大值 double max (double num1, double num2) { //比较num1和num2 if (num1 >= num2) { return num1; } else { return num2; } } //返回三个数间的最大值 double max (double num1, double num2, double num3) { //比较num1, num2, 选出最大值再和num3比 return max(max(num1, num2), num3); } int main() { cout << "1和3的最大值:" << max(1, 3) << endl; cout << "1.1和3.3的最大值:" << max(1.1, 3.3) << endl; cout << "1.1和3.3和5.5的最大值:" << max(1.1, 3.3, 5.5) << endl; return 0; }
可以给函数参数一个缺省值,在没有参数传入的时候,则缺省值将传递给函数。
#include <iostream> using namespace std; //设置参数缺省值为1 void printArea(double radius = 1) { cout << "area is " << radius*radius*3.14159 << endl; } int main() { printArea(); printArea(4); return 0; }
结果:
在C++中使用内联函数来提高短函数的性能。
函数使得程序更易读、易维护,但是也增加了一下开销(压栈,函数切换的时间等)。使用内联函数可以避免函数调用的开销。其工作本质是:将函数中的代码复制到其调用点处。也就是说你看到的代码是有该函数的,但是在编译器里的代码是没有该函数的。
内联函数的语法是在函数的返回值类型前面加一个关键字inline,如:
#include <iostream> using namespace std; //内联函数 inline void printArea(double radius) { cout << "area is " << radius*radius*3.14159 << endl; } int main() { double radius = 1; printArea(radius); printArea(4); return 0; }
上面的代码在编译器中与下面的代码是一样的:
#include <iostream> using namespace std; int main() { double radius = 1; cout << "area is " << radius*radius*3.14159 << endl; cout << "area is " << 4*4*3.14159 << endl; return 0; }
注意:内联函数适合短函数而非长函数。如果是长函数,编译器会忽略长函数的inline关键字,否则会使可执行代码变得很长。也就是说,inline只是向编译器提出一个请求,接不接受要看编译器。
看下面代码,目的是交换两个变量的值:
#include <iostream> using namespace std; void swap(int a, int b) { cout << "a is " << a << " and b is " << b << " before swapping " << endl; int temp = a; a = b; b = temp; cout << "a is " << a << " and b is " << b << " after swapping " << endl; } int main() { int a = 1, b = 2; swap(a, b); //实际结果 cout << "In fact, a is " << a << " and b is " << b << " after swapping " << endl; return 0; }
来看一下运行结果:
可以看到,执行完swap函数之后,a与b并没有真正地交换。为什么呢?
因为这个swap函数是按值传参的,也就是说,实参a,b传给形参a,b之后,实参a与形参a使用的是不同的地址空间,也就是说这两个a除了值相同,没有任何的关系(b同理),所以在交换形参a与b的时候,对实参没有任何影响。那么如何让a与b真正的交换呢?
按址传参
所谓按址传参,就是按照地址传递参数的意思,也就是说,这时候形参的地址与实参的地址相同,即这两个是同一个东西,形参相当于实参的别名(你可以类比人的大名和你的小名,虽然两者称呼不同,但是都指的是同一个人)。这样一来,交换就可以操作实参了。
那么如何按址传参?很简单,在int后面加上"&"即可。关于符号"&",会在指针部分说到。
#include <iostream> using namespace std; void swap(int& a, int& b) { cout << "a is " << a << " and b is " << b << " before swapping " << endl; int temp = a; a = b; b = temp; cout << "a is " << a << " and b is " << b << " after swapping " << endl; } int main() { int a = 1, b = 2; swap(a, b); //实际结果 cout << "In fact, a is " << a << " and b is " << b << " after swapping " << endl; return 0; }
如果你不想让本来的变量随意修改,那么可以用常数引用参数(数据类型前面加const关键字)
如果把上面一段代码的swap函数的函数签名改成:swap(const int& a, const int& b),那么在执行时候就会报错,因为常数引用参数不可以更改。报错信息如下:
标签:程序 namespace 语法 调用 一段 内联函数 bsp and int
原文地址:https://www.cnblogs.com/bwjblogs/p/12637877.html