函数

一.Main

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     for (int i = 0; i < argc; i++)
 7     {
 8         cout << argv[i] << endl;
 9     }
10     
11     return 0;
12 }

二.内联函数

为了解决调用小函数大量消耗栈空间的问题

 1 #include <iostream>
 2 using namespace std;
 3 
 4 inline char* dbtest(int a)
 5 {
 6     return (a % 2 == 0) ? "":"";
 7 }
 8 
 9 int main(int argc, char *argv[])
10 {
11     cout << dbtest(2) << endl;
12     
13     return 0;
14 }

等价于

1 #include <iostream>
2 using namespace std;
3 
4 int main(int argc, char *argv[])
5 {
6     cout << ((2 % 2 == 0) ? "":"") << endl;
7     
8     return 0;
9 }

inline函数体不能过大,不能包含复杂结构(while,switch),不能直接递归调用。inline要在函数声明的时候表示,声明的时候不写,定义的时候写是错误的

内联与宏:

宏是由预处理器替代,而内联函数是通过编译实现。inline能让编译器检查出更多的错。inline是真正的函数。

三.重载

函数名相同,函数的参数列表不同

避免二义性:

1 void x(){}
2 void x(int i = 0){}

四.缺省默认值

某个写好的函数要添加新的参数,而原来该函数的语句未必需要新增的参数,那么为了避免对原来那些函数调用语句的修改可以使用缺省参数

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void f(int x, float s = 12.6, char t = '
', string msg = "error"){}
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     f(14, 48.3, '	', "ok");//ok
10     f(14, 48.3, '	');//ok
11     f(14, 48.3);//ok
12     f(14);//ok
13     f();//error
14     //缺省默认值的参数要在参数列表最左边
15     // int d(int x, int y = 10), OK
16     // int d(int y = 10, int x), error
17     //默认参数在声明中给出而非定义中    
18     return 0;
19 }

五.static

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void f()
 5 {
 6     int a = 0;
 7     static int b = 0;
 8 
 9     a++;
10     b++;
11 
12     cout << a << " " << b << endl;
13 }
14 
15 int main()
16 {
17     for (int i = 0; i < 3; i++)
18     {
19         f();
20     }
21     /*
22     1 1
23     1 2
24     1 3
25     */
26     return 0;
27 }
原文地址:https://www.cnblogs.com/wanderingzj/p/5293349.html