参数列表中间是否有默认参数?
|
我在我们的代码中看到了一个函数声明,如下所示
void error(char const *msg, bool showKind = true, bool exit);
我首先认为这是一个错误,因为您不能在函数中间使用默认参数,但是编译器接受了此声明。谁看过这个吗?我正在使用GCC4.5。这是GCC扩展程序吗?
奇怪的是,如果我将其取出到单独的文件中并尝试进行编译,则GCC会拒绝它。我已经仔细检查了所有内容,包括使用的编译器选项。
没有找到相关结果
已邀请:
2 个回复
揽芳僵迷仇
然后,在同一作用域中,可以在后面的声明中为其他参数(从右侧)提供默认值,如下所示:
可以称为:
在线演示:http://ideone.com/aFpUn 请注意,如果您为第一个参数提供默认值(从左开始),而没有为第二个参数提供默认值,则将无法编译(如预期):http://ideone.com/5hj46 §8.3.6/ 4说, 对于非模板功能,默认 参数可以在以后添加 同一函数的声明 范围。 来自标准本身的示例:
第二个声明添加默认值! 另请参见§8.3.6/ 6。
扦帽次杏
读完这篇文章后,我发现MSVC10在关闭编译器扩展的情况下接受了以下内容: