С++ 03 5.1 Первичные выражения
§2:
Литерал является основным выражением. Его тип зависит от его формы (2.13). Строковый литерал - это значение lvalue; все другие литералы - это значения.
В чем причина этого? Как я понимаю, строковые литералы - это объекты, а все остальные литералы - нет. И l-значение всегда относится к объекту.
Но тогда возникает вопрос, почему строковые литералы объекты, а не все другие литералы? Это объяснение мне больше напоминает проблему с яйцом или курицей.
Я понимаю, что ответ на этот вопрос может быть связан с аппаратной архитектурой, а не с C/С++ в качестве языков программирования, тем не менее я хотел бы услышать то же самое.
Примечание. Я помещаю этот вопрос как c и С++, так как стандарт C99 также имеет похожие цитаты, в частности §6.5.1.4