我有一个微不足道的例子:
struct A {
explicit A(int a) : a(a) {}
protected:
int a;
};
struct B : public A { int b = 0, c = 0; };
// Attempts to get the code compiled:
B b1 { A(1), .c = 2 }; // fine with clang-11
B b2 { A{1}, .c = 2 };
B b3 { .A{1}, .c = 2 };
B b4 { {1}, .c = 2 };
B b5 { .a = 1, .c = 2 };第一个示例在g++10 -std=c++20上失败,错误如下:
错误:应该指定所有初始化器子句,或者不应该指定任何一个子句。
虽然在clang++-11上没问题。
是否有适当的句法方法来达到以下目的:
或者在这种情况下,Clang编译器是否不符合C++20标准?我看到了这的问题,它的回答表明是这样的:mixing designated initializers with non-designated initializers, which is not allowed.
发布于 2021-04-08 14:16:22
你不能。目前,在也需要初始化基类的大括号-init-列表中没有使用指定的初始化器的方法。有个建议,但显然目前不在C++中。
https://stackoverflow.com/questions/67005837
复制相似问题