相关疑难解决方法(0)

具有非静态成员初始值设定项的类的C++ 11聚合初始化

是否允许标准:

struct A
{
  int a = 3;
  int b = 3;
};

A a{0,1}; // ???
Run Code Online (Sandbox Code Playgroud)

这个课程仍然是聚合的吗? clang接受此代码,但gcc不接受.

c++ gcc aggregate-initialization c++11 c++14

33
推荐指数
1
解决办法
6519
查看次数

g ++ 4.9拒绝C++ 14中的有效聚合初始化

考虑以下代码:

struct S
{
    int x;
    double y = 1.1;
};

int main()
{
    S s = {0};
}
Run Code Online (Sandbox Code Playgroud)

根据C++ 14标准,§8.5.1/ 7

如果列表中的初始化子条款少于聚合中的成员,则未明确初始化的每个成员应从其大括号或等号初始值初始化,或者,如果没有大括号或等号初始值,从空的初始化列表(8.5.4).

代码应该完全有效.

但是,g ++ 4.9.2拒绝代码(编译-std=c++14)

so.cpp:9:13: error: could not convert '{0}' from '<brace-enclosed initializer list>' to 'S'
     S s = {0};
Run Code Online (Sandbox Code Playgroud)

另一方面,clang ++编译它.

这是g ++的已知问题吗?

c++ g++ c++14

4
推荐指数
1
解决办法
485
查看次数

标签 统计

c++ ×2

c++14 ×2

aggregate-initialization ×1

c++11 ×1

g++ ×1

gcc ×1