1、函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。
return ++val;
void foo(...);
2、const形参:在调用参数时,如果该函数使用非引用的非const形参,则既可给该函数传递const实参,也可传递const的实参。在函数中,不可以改变实参的局部副本。
尽管函数的形参是const,但是编译器却将fcn的定义视为其形参被声明为普通的int型:
void fcn(const int i){}
void fcn(int i){}
//error:redefines fcn(int)
3、使用引用形参返回额外的信息
vector::const_iterator find_val(vector::const_iterator beg,vector::const_iterator end,int value,vector::size_type &occurs){}
4、非const引用形参只能与完全同类型的非const对象关联,传递一个右值或具有需要转换的类型的对象同样是不允许的。
如:int incr(int &val)
{
}
short v1 = 0;
const int v2 = 42;
int v3 = incr(v1);
//error:v1 is not an int。
v3 = incr(v2);
//error:v2 is const
v3 = incr(0);
//error:literals are not lvalues
v3 = incr(v1 + v2);
//error:addition doesn't yield an lvalue
int v4 = incr(v3);
//ok:v3 is a non const object type int
5、普通的非const引用形参在使用时不太灵活,既不能用const对象初始化,也不能用字面值或产生右值的表达式实参初始化。
6、数组形参:不能直接传递数组,但是函数的形参可以写成数组的形式。
7、通过引用传递数组:编译器检查数组实参的大小与形参的大小是否匹配。
8、main:处理命令行选项
假设主函数面位于名为prog的可执行文件中,可如下将实参选项传递给程序:
prog -d -o ofile data0
实际上是在main中定义了两个形参:
int main(int argc , char *argv[]){}
第二个形参argv是一个C风格字符串数组,第一个形参argc则用于传递该数组中字符串的个数。
如上命令行,argc应设为5,argv会保存下面几个C风格字符串:
argv[0] = “prog”;
argv[1] = “-d”;
argv[2] = “-o”;
argv[3] =“ofile”;
argv[4] =“data0”;
9、含有可变形参的函数
如:void foo(parm_list,...);
10、允许主函数main没有返回值就可结束。如果程序控制执行到主函数main的最后一个语句都还没有返回,那么编译器会隐式地插入返回0的语句。
11、千万不能返回局部变量的引用。
12、返回引用的函数可以返回一个左值。
13、递归函数必须定义一个终止条件。主函数main不能调用自身。