一.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 }