在const参数的默认参数中使用的统一初始值设定项

时间:2011-07-07 19:13:55

标签: c++ c++11 uniform-initialization

这是合法的c ++ 0x语法吗?

class A
{
public:
    void some_function( const std::set<std::string> &options = {} );
    // note that this is legal, which binds the const reference to a temporary:
    void some_function( const std::set<std::string> &options = std::set<std::string>() );
}

因为如果是这样,我刚刚在GCC 4.6中发现了一个错误。

我得到的错误是:

  

错误:在'{'标记

之前预期的primary-expression

这是......逻辑......如果它是非法的。

UPDATE:正如@Kerrek所说,这会渗透到普通的C ++ 03中,带有聚合和旧的大括号初始化语法。为什么这不可能?是否禁止使用标准?或编译器有错?或者这是疏忽吗?我没有看到任何严重的问题,允许将其作为明确调用构造函数的替代方法。

1 个答案:

答案 0 :(得分:7)

它在C ++ 11中有效,但是对于Bjarne所通过的工作文件来说是a very late addition。因此,GCC不支持大括号默认参数也就不足为奇了。