c++ - 使用统一初始化语法的初始化列表的类内成员初始化?

标签 c++ c++11 initializer-list uniform-initialization in-class-initialization

<分区>

我正在尝试使用 MSVC2013 编译以下内容:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{false, false, false};
}

编译器给我以下错误:SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.

如果我把代码改成这样:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{{false, false, false}};
}

程序编译并运行良好。这是编译器的问题,还是我不理解语法?根据我一直在阅读的内容,第一个版本应该可以编译。

最佳答案

这是来自 N3797 的负责任的语法:

// after a member declaration:
braced-or-equal-initializer-list:
  = initializer-clause
  braced-init-list

braced-init-list:
  { initializer-list ,OPT }
  { }

initializer-list:
  initializer-clause
  initializer-list, initializer-clause

initializer-clause:
  assignment-expression
  braced-init-list

所以我会说第一个陈述是正确的,它确实被接受了 最近的 gccclang

关于c++ - 使用统一初始化语法的初始化列表的类内成员初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035388/

相关文章:

c++ - 此 c++11 lambda 代码是否调用未定义的行为?

arrays - 转换匿名数组初始值设定项列表

C++ std::initializer_list 用法

c++ - 没有匹配函数调用 ‘X::X()’

c++鼠标点击模拟代码

c++ - 我刚开始使用 Eigen 矩阵代数库,旨在创建数据集的相似矩阵,有什么建议吗?

c++ - 将 vector 元素制作成字符串进行比较?

c++ - 在 Qt 的 QStringList 中搜索 QString 的一部分

c++ - 用多个线程填充 vector

c++ - 从属名称解析和命名空间标准/标准库