如果在函数的第一个声明中,最后一个参数具有默认值,则该代码将起作用,如下所示:
//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/aFpUn
请注意,如果您为第一个参数(从左开始)提供默认值,而不为第二个参数提供默认值,则它将无法编译(如预期):http://ideone.com/5hj46 http://ideone.com/5hj46
§8.3.6/4 说,
对于非模板函数,默认
参数可以稍后添加
同一函数中的函数声明
范围。
标准本身的示例:
void f(int, int);
void f(int, int = 7);
第二个声明添加了默认值!
另请参阅§8.3.6/6。