А как насчет другой возможности:
char charArray3[] = {102, 111, 111, 0};
Вы не должны забывать, что тип C char является числовым типом, просто случается, что значение часто используется как код символа. Но если я использую массив для чего-то, вообще не связанного с текстом, я бы определенно предпочел инициализировать его с помощью вышеуказанного синтаксиса, чем кодировать его в буквы и ставить их в кавычки.
Если вы не хотите использовать терминал 0, вам также нужно использовать вторую форму или использовать C:
char charArray3[3] = "foo";
Это функция C, о которой почти никто не знает, но если у компилятора недостаточно места для хранения последнего 0 при инициализации charArray, он не помещает его, но код допустим. Однако этого следует избегать, поскольку эта функция была удалена из C ++, и компилятор C ++ мог бы выдать ошибку.
Я проверил ассемблерный код, сгенерированный gcc, и все разные формы эквивалентны. Единственное отличие состоит в том, что для объявления данных используются псевдо-инструкция .string или .byte. Но это всего лишь проблема читабельности, и в получившейся программе это не имеет большого значения.