如果在函数的第一个声明中,最后一个参数具有默认值,则该代码将起作用,如下所示:
//declaration
void error(char const *msg, bool showKind, bool exit = false);
然后在相同的范围内,您可以在后面的声明中为其他参数(从右侧)提供默认值,如:
void error(char const *msg, bool showKind = true, bool exit); //okay
//void error(char const *msg = 0 , bool showKind, bool exit); // error
可以称为:
error("some error messsage");
error("some error messsage", false);
error("some error messsage", false, true);
在线演示:http://ideone.com/aFpUn
请注意,如果您为第一个参数(从左至右)提供默认值,而没有为第二个参数提供默认值,它将无法编译(如预期的那样):http://ideone.com/5hj46
§8.3.6/4 说,
对于非模板函数,默认
参数可以稍后添加
同一个函数的声明
范围。
标准本身的示例:
void f(int, int);
void f(int, int = 7);
第二个声明添加默认值!
另见 §8.3.6/6。