Почему инициализатор, содержащий строковый литерал, допустим для инициализации массива char?

Оказывается, char c [] = {"a "}; полностью действителен как в C ++ 03 , так и в C ++ 11 .

Я не ожидал, что это будет, потому что это массив из char , а не из char const * , и я ожидал, что для инициализатора фигурных скобок потребуется совместимый тип для каждый свой «предмет». В нем есть один элемент, и это char const * , а не char .

Так что же делает эту инициализацию действительной? И есть ли этому объяснение?


Аналогично, char c [] = {"aa"}; компилируется, и печать c приводит к выводу " ] aa ".

Я ожидал, что char c [] {"a"} , конечно, будет действительным в C ++ 11, но это не то же самое! Аналогично, char c [] = {'a'} очевидно в обоих, как и char c [] = "a" .

16
задан Lightness Races with Monica 9 November 2011 в 12:16
поделиться