为什么这个c++代码片段用std=c++17编译,但用std=c++20编译失败?[副本]

qnzebej0  于 2023-05-24  发布在  其他
关注(0)|答案(1)|浏览(158)

此问题已在此处有答案

How to get away with using designated initializers in C++17? Or, why is it seemingly safe to use them, if it's really not?(1个答案)
Designated initializers in C++20(2个答案)
3天前关闭。
在godbolt中:https://godbolt.org/z/bY1a3e1Wz
有问题的代码如下(错误消息显示“error:要么所有初始化子句都应该被指定,要么它们都不应该被指定为“但我不明白它在说什么”。

struct A {
    int a;
    bool b;
};

struct B : A {
    long c;
};

int main(void) {
    B foo {{.a = 1, .b = false}, .c = 7};
}
jogvjijk

jogvjijk1#

从我在docs中看到的,看起来应该可以工作:

B foo = {{.a = 1, .b = false}, 7};

原因似乎是第一个初始化器是“无名的”(按顺序),因此第二个(c)也应该按顺序而不是按名称初始化(不能是designated

相关问题