【发布时间】:2020-07-20 08:53:39
【问题描述】:
C++20 introduces designated initialisers。我正在尝试使用新语法初始化结构内的字符数组。
Pretty simple problem, I think code may explain it best:
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;
}
我发现了这种行为 bazzar,char str[12] = "hello"; 行工作得很好。但是相同的初始化形式在指定的初始化列表中不起作用。
问题: 为什么我不能用字符串字面量初始化 char 数组?
编辑
我之前使用的是 GCC。 This works with clang. GCC 是否有解决方法,clang 或 GCC 是否正确?
【问题讨论】:
-
... 所以 GCC 拒绝
Test testa { .v = 100u, .b = "hello" };但在非迂腐模式下接受Test testa { .v = 100u, { .b = "hello" } };,这显然是荒谬的。 -
有趣,对我来说听起来像是编译器错误...感谢相关链接!
标签: c++ initialization language-lawyer c++20 designated-initializer