C++ 函数

来源:互联网 发布:java json数组遍历 编辑:程序博客网 时间:2024/05/17 23:11

1、函数定义

1.1 未命名参数
根本不使用的参数可以采用不予命名的方式明示。
出现未命名参数的原因:1)做代码的简化 2)在将来做功能扩充。

1.2 inline修饰
给编译器一个提示,要求把所有对被inline修饰的函数的调用在线化。
取消函数的参数压栈,减少调用开销。

1.3静态变量
如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象。
静态变量,使我们不必去引进可能被其他函数访问或破坏的全局变量。


2、参数传递

2.1 const修饰
将参数声明为const,以指明这种参数仅仅是为了效率。
文字量、常量和需要转换的参数都可以传递给const&参数,但不能传递给非const的引用。

2.2数组参数
类型T[]作为参数传递时将被转换成T*。
数组不是按值传递。
对数组参数的某个元素的赋值,将改变实际参数数组中那个元素的值。


3、返回值

绝不能返回指向局部变量的指针。

4、重载函数名

4.1基本思想是去调用其中的那个在参数上匹配的最好的函数。
[1]准确匹配;
无须任何转换或者只须做平凡转换(例如,数组名到指针、函数名到函数指针、T到const T等)的匹配。
[2]利用提升的匹配;即包括整数的提升(bool到int,char到int,short到int以及它们的无符号版本)以及从float到double的提升。
[3]利用标准转换(例如,int到
double,double到int,double到long double,Derived*到Base*,T*到void*,int到unsigned int)的匹配。
[4]利用用户定义的转换的匹配。
[5]利用在函数声明中的省略号...的匹配。
能找到匹配的某个最高的层次上同时发现了两个匹配,这个调用将作为存在歧义而被拒绝。
4.2重载与作用域
在不同的非名字空间作用域里声明的函数不算重载。


5、默认参数

只可能对排列在最后的那些参数提供默认参数。
在*和=之间的空格是重要的。
在同一作用域中随后的声明里,默认参数都不能重复或者修改。


6、未确定数目的参数

没办法确定在各个调用中所期望的所有参数的个数和类型。省略号表示“还可能有另外一些参数”。
printf("My name is %s %s\n", 2);
将能通过编译,但将会导致某些看起来很奇怪的输出。(VS2010中会发生异常)


7、宏

宏的名字不能重载,而宏预处理器不能处理递归调用。
原创粉丝点击