Почему sizeof и decltype не согласованы?
От: Tilir Россия http://tilir.livejournal.com
Дата: 26.06.17 10:39
Оценка:
Возьмём строковые литералы.

Сначала несколько простых вопросов и ответов.

Вопрос: какой тип у строкового литерала "Hello, world!"?
Ответ: его тип это const char[13]
Вопрос: что выведет decltype("Hello, world!")?
Ответ: поскольку массив это lvalue, будет выведено const char (&) [13]
Вопрос: что вернёт sizeof("Hello, world!")?
Ответ: sizeof("Hello, world!") == 14

А теперь философский вопрос: почему это так -- там 13 а там 14?

Нет, серьёзно. Дополнительный implicit нулевой завершающий символ влияет на sizeof, ок, так и сделали бы выведенный тип тоже шириной 14. Я погуглил ответ, но как-то никак. Я уверен, что это сделано for a reason, чтобы в языке что-нибудь такое важное срослось. Но что?

Спросил бы на stackoverflow, но вопрос получится "слишком общий" по тамошним правилам.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.