void update(float& i);
void g(double d, float r)
{
update(2.0f); //错误
update(r); //传递r的引用
update(d); //错误,要求类型转换
}
一个void函数可以将另一个void函数作为它的return语句中的表达式,例如:
void g(int* p);
void h(int* p)
{
return g(p); //可以,返回无值
}
函数重载只重载参数类型和参数个数,不重载返回类型
在不同的非名字空间作用域里声明的函数不算是重载,例如:
void f(int);
void g()
{
void f(double);
f(1); //调用f(double)
}
在同一个作用域中随后的声明里,默认参数都不能重复或者改变,例如:
void f(int x = 7);
void f(int = 7); //错误,默认参数不能重复
void f(int = 8); //错误,默认参数不能改变
void f(int); //可以,函数可以重复声明
void g()
{
void f(int x = 9); //可以,这个声明将遮蔽外层的声明
}
void error(string s);
void(*f1)(string) = &error; //可以
void(*f2)(string) = error; //也可以,与&error意思一样
void g()
{
f1("vasa"); //可以
(*f1)("mary rose"); //也可以
}
宏名字不能重载,而且宏预处理器不能处理递归调用
##宏运算符可以拼接两个串,构造出一个新串,例如:
#define NAME2(a,b) a##b
int NAME2(hack,cah)();将产生int hackcah();
#undef X保证不再用称为X的有定义的宏--无论在此指令之前有还是没有。