2015-10-25 43 views
3

我碰到过这段代码片段,它用g ++编译得很好。我可以理解正在发生的事情,但这是有效的C++还是扩展?初始化数组的C++语法

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

这是完全合法的,并且对初始化某个索引而非整个数组非常有用 – texasbruce

回答

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++标准的声明。