C++初始化数组的语法

3

我遇到了这段代码,使用g++编译没有问题。我能理解它的作用,但是这是有效的C++代码还是扩展代码?

const char* msgs[] = 
{
    [0] = "message0",
    [1] = "message1"
};

在特定的索引处初始化而不是整个数组是完全合法且非常有用的。 - SwiftMango
1个回答

2

这是合法的C语法。在C语言中,您可以使用所谓的指示符。

designator:
    [ constant-expression ]
    . identifier

再来一个例子

struct A
{
   int x;
   int y;
} a = { .x = 10, .y = 20 };

但在C++中这是无效的。在C++中,你应该写成

const char* msgs[] = 
{
    "message0",
    "message1"
};

如果C++编译器编译了您展示的声明,那么它就是自己的语言扩展,不符合C++标准。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接