聚合初始值设定项之外的 C99 指示符成员

Ari*_*ing 12 c++ gcc

struct Foo {\n    char a[10];\n    int b;\n};\n\nstatic Foo foo = {.a="bla"};\n
Run Code Online (Sandbox Code Playgroud)\n

编译上面的代码会出现以下 gcc 错误:

\n
$ gcc -std=gnu++2a test.cpp \n\nC99 designator \xe2\x80\x98a\xe2\x80\x99 outside aggregate initializer\n
Run Code Online (Sandbox Code Playgroud)\n

我认为像这样的初始化列表中的 C 字符串指示符在 C++20 中可以吗?我缺少什么?我正在使用 gcc 版本 10。

\n

Art*_*yer 20

这是 GCC 的一个已知错误:https://gcc.gnu.org/bugzilla/show_bug.cgi ?id=55227

不幸的是,您必须不使用指定的初始值设定项或为数组使用不同的初始值设定项:

static Foo foo = {"bla"};
static Foo foo = {.a={'b', 'l', 'a', 0}};

// Or if you can change Foo:
struct Foo {
    std::array<char, 10> a;
    int b;
};
static Foo foo = {.a={"bla"}};
Run Code Online (Sandbox Code Playgroud)

如果您可以升级编译器,这似乎已在 GCC 11.3 中修复。