C++20引入了指定初始化器。我正在尝试使用新语法来初始化结构体中的字符数组。
struct Test
{
unsigned v;
char b[12];
};
int main()
{
char str[12] = "hello"; // Works.
char strb[12]{"hello"}; // Works.
//
Test testa
{
.v = 100u,
.b = "hello" //Doesn't work...
};
Test testb
{
.v = 100u,
.b = { "hello" } //Doesn't work...
};
Test testc
{
.v{ 100u },
.b{ "hello" } //Doesn't work...
};
Test testd
{
.v{ 100u },
.b{ "hello" } //Doesn't work...
};
Test teste
{
.v = 100u,
.b = {} //This works.
};
Test testf
{
.v = 100u,
.b = {'h', 'e', 'l', 'l', 'o', '\0'} //This works.
};
return 0;
}
我觉得这种行为很奇怪,
char str[12] = "hello";
这一行可以正常工作。但是在指定初始化器列表中相同的初始化形式却不起作用。
问题:
为什么我不能使用字符串字面值初始化字符数组?
编辑
之前我使用的是GCC。
这在clang中可行。 是否有GCC的解决方法,clang或GCC哪个正确?
Test testa { .v = 100u, .b = "hello" };
但在非严格模式下接受Test testa { .v = 100u, { .b = "hello" } };
,这显然是荒谬的。 - cpplearner