【问题标题】:Uniform initializer used in default argument to const reference常量引用的默认参数中使用的统一初始化程序
【发布时间】:2011-07-07 19:13:55
【问题描述】:

这是合法的 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 中发现了一个错误。

我得到的错误是:

错误:“{”标记之前的预期主表达式

这是……合乎逻辑的……如果它是非法的。

更新: 正如@Kerrek 所说明的那样,这会渗透到普通的 C++03 中,并带有聚合和旧的大括号初始化语法。为什么这是不可能的?标准中是否禁止?还是编译器有问题?或者这是一个疏忽?我认为允许将此作为​​显式调用构造函数的替代方法没有任何严重问题。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常有趣。但是由于我今天刚刚在 GCC 中报告了一个关于仍在 4.7 中的初始化的崩溃错误,并且由于从 4.6.0 升级到 4.6.1 修复了另一个不相关的初始化错误,我很高兴相信 GCC 根本不是做对了。
    • Bam,这就是我喜欢 SO.com 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多