2015-10-25 5 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++.

Смежные вопросы