Мы переводим код C в С++.
Я заметил, что следующий код хорошо определен в C,
int main(){
//length is valid. '\0' is ignored
char str[3]="abc";
}
как указано в инициализации массива, который:
"Если размер массива известен, он может быть на один меньше размера строковый литерал, в этом случае завершающий нулевой символ проигнорировано".
Однако, если я должен был создать тот же код в С++, я получаю следующую ошибку С++:
error: initializer-string for array of chars is too long
[-fpermissive] char str[3]="abc";
Я надеюсь, кто-то сможет изложить это.
Вопросы:
Является ли пример кода действительным во всех стандартах языка C?
Это недействительно во всех языковых стандартах на С++?
Есть ли причина, которая действительна на одном языке, но не в другом?