相关疑难解决方法(0)

为什么C++ 11不支持指定的初始化列表作为C99?

考虑:

struct Person
{
    int height;
    int weight;
    int age;
};

int main()
{
    Person p { .age = 18 };
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在C99中是合法的,但在C++ 11中不合法.

什么是标准委员会排除了这样一个方便的功能支持的理由?

c c++ initialization c99 c++11

110
推荐指数
5
解决办法
5万
查看次数

初始化结构的指定初始化

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

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

} MyStruct;

MyStruct s = {.a = 1, .b = 2, .c = 3};
Run Code Online (Sandbox Code Playgroud)

(该代码在我的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};
}
Run Code Online (Sandbox Code Playgroud)

我认为初始化应该只在创建对象时才有效,而不是之后.

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

c c++ struct

4
推荐指数
1
解决办法
2994
查看次数

标签 统计

c ×2

c++ ×2

c++11 ×1

c99 ×1

initialization ×1

struct ×1