为什么clang和gcc用类内初始化对结构的支撑初始化进行不同的处理?

用户名

我最近发现了clang和gcc的奇怪行为。我有一个struct(MyClass),它为其成员之一)使用类内初始化active

struct MyClass {
  int something;
  bool active = true;
};

现在,我尝试将此类初始化为括号。

使用clang,我可以决定是否将其包含active在初始化器列表MyClass a = { 42, true};MyClass a = { 42 };)中。

但是,使用gcc时,如果不包含,则仅编译我的代码active否则,我将得到以下编译器错误:

 error: could not convert ‘{42, true}’ from ‘<brace-enclosed initializer list>’ to ‘MyClass’

这是一个错误吗?标准怎么说?VSC ++呢?您会推荐哪种方式作为便携式解决方案?

在Debian Linux上使用gcc 4.9和clang 3.5进行了测试。

毫米

此代码的行为在C ++ 11和C ++ 14之间发生了变化。

在C ++ 11中,存在的= true意思是该类不是聚合的。因此,您不能使用聚合初始化。

在C ++ 14中,该类仍然是聚合的,因此您可以再次使用聚合初始化。

编译器之间的差异可以用一个比另一个更新来解释。使用编译器浏览器,我看到gcc 4.9.x弄错了,但这在gcc 5.1中已修复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用clang vs gcc进行联合零初始化

来自分类Dev

用clang vs gcc进行联合零初始化

来自分类Dev

为什么通过基类指针进行的派生类初始化与通过派生类指针进行的初始化不同?

来自分类Dev

为什么在gcc中进行静态初始化之前要进行动态初始化

来自分类Dev

使用较少子句进行结构聚合初始化,为什么要初始化所有内容?

来自分类Dev

这是GCC错误吗?用联合初始化结构

来自分类Dev

默认初始化和值初始化结构的不同性能

来自分类Dev

为什么在C ++ 11 / C ++ 14中针对自动和支撑初始化程序有特殊的类型推导规则?

来自分类Dev

初始化double时,请指定float。gcc和clang不同

来自分类Dev

在类的初始化和初始化列表中

来自分类Dev

为什么用结构体初始化数组需要指定结构体名称

来自分类Dev

使用聚合初始化和成员初始化程序初始化结构

来自分类Dev

Tensorflow 的占位符初始化与 tensorflow 的常量初始化不同。为什么?

来自分类Dev

为什么类数据成员不能通过直接初始化语法初始化?

来自分类Dev

为什么不能在类的构造函数的初始化列表中初始化ifstream?

来自分类Dev

在结构内部初始化静态constexpr变量和类

来自分类Dev

结构或类中的数组初始化

来自分类Dev

从空指针初始化类/结构

来自分类Dev

为什么初始化结构时出现段错误?

来自分类Dev

MSVC为什么不初始化此const结构?

来自分类Dev

用模板初始化结构

来自分类Dev

用{0}初始化结构

来自分类Dev

用联合返回结构的初始化

来自分类Dev

用malloc初始化结构

来自分类Dev

零初始化,静态初始化和价值初始化有何不同?

来自分类Dev

类内成员初始化程序和初始化列表之间的冲突解决

来自分类Dev

不同的类或结构初始化方法之间的性能差异是什么?

来自分类Dev

在结构内静态初始化数组

来自分类Dev

在结构内初始化数组

Related 相关文章

  1. 1

    用clang vs gcc进行联合零初始化

  2. 2

    用clang vs gcc进行联合零初始化

  3. 3

    为什么通过基类指针进行的派生类初始化与通过派生类指针进行的初始化不同?

  4. 4

    为什么在gcc中进行静态初始化之前要进行动态初始化

  5. 5

    使用较少子句进行结构聚合初始化,为什么要初始化所有内容?

  6. 6

    这是GCC错误吗?用联合初始化结构

  7. 7

    默认初始化和值初始化结构的不同性能

  8. 8

    为什么在C ++ 11 / C ++ 14中针对自动和支撑初始化程序有特殊的类型推导规则?

  9. 9

    初始化double时,请指定float。gcc和clang不同

  10. 10

    在类的初始化和初始化列表中

  11. 11

    为什么用结构体初始化数组需要指定结构体名称

  12. 12

    使用聚合初始化和成员初始化程序初始化结构

  13. 13

    Tensorflow 的占位符初始化与 tensorflow 的常量初始化不同。为什么?

  14. 14

    为什么类数据成员不能通过直接初始化语法初始化?

  15. 15

    为什么不能在类的构造函数的初始化列表中初始化ifstream?

  16. 16

    在结构内部初始化静态constexpr变量和类

  17. 17

    结构或类中的数组初始化

  18. 18

    从空指针初始化类/结构

  19. 19

    为什么初始化结构时出现段错误?

  20. 20

    MSVC为什么不初始化此const结构?

  21. 21

    用模板初始化结构

  22. 22

    用{0}初始化结构

  23. 23

    用联合返回结构的初始化

  24. 24

    用malloc初始化结构

  25. 25

    零初始化,静态初始化和价值初始化有何不同?

  26. 26

    类内成员初始化程序和初始化列表之间的冲突解决

  27. 27

    不同的类或结构初始化方法之间的性能差异是什么?

  28. 28

    在结构内静态初始化数组

  29. 29

    在结构内初始化数组

热门标签

归档