gpt4 book ai didi

c++ - initialized struct的指定初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:17 25 4
gpt4 key购买 nike

我知道我可以使用指定的初始化程序在 C99 中初始化结构,如下所示:

typedef struct
{
char a;
char b;
int c;

} MyStruct;

MyStruct s = {.a = 1, .b = 2, .c = 3};

(该代码在我的 C++ 编译器中不起作用,但(俄语)维基百科说它应该)

但由于某些奇怪的原因,这样的代码也可以编译(并按预期工作):

typedef struct
{
char a;
char b;
int c;

} MyStruct;


MyStruct arr[5];

int main(void)
{
arr[0] = (MyStruct){.a = 1, .b = 2, .c = 0x332211};
}

我认为初始化应该只在创建对象时起作用,而不是之后。

这种行为是正常的还是某种编译器怪癖?它应该在 C++ 中工作吗?花括号中的这个东西到底是什么?某种临时的未命名结构?我正在使用 Keil uVision 4(并且指定的初始化程序在 C++ 模式下不工作)。

最佳答案

指定初始化器是一种 C 结构,它们不是 C++ 的一部分。因此 C++ 编译器拒绝代码是正确的,并且在这两种情况下都应该这样做。

第二个构造是“复合文字”,也是一个不属于 C++ 的 C 特性。因此 C++ 编译器应该拒绝它,而 C99(或更新版本)编译器应该接受这两个片段。

关于c++ - initialized struct的指定初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com