Почему комитет С++ решил, что ссылки на константу должны продлить время жизни временных файлов?
Этот факт уже широко обсуждался в Интернете, в том числе здесь, в stackoverflow. Определенный ресурс, объясняющий, что это так, вероятно, это GoTW:
GotW # 88: Кандидат на "Самый важный const"
В чем была причина этого языка? Известно ли это?
(Альтернативой было бы то, что время жизни временных рядов не расширяется никакими ссылками.)
Моя собственная теория домашних животных для обоснования заключается в том, что это поведение позволяет объектам скрывать детали реализации. С помощью этого правила функция-член может переключаться между возвратом значения или константной ссылки на уже внутренне существующее значение без изменения кода клиента. Например, класс матрицы может возвращать векторы строк и векторы столбцов. Чтобы свести к минимуму копии, один или другой может быть возвращен в качестве ссылки в зависимости от реализации (строка major или major major). Независимо от того, что нельзя вернуть по ссылке, необходимо вернуть, сделав копию и вернув это значение (если возвращаемые векторы смежны). Писатель библиотеки может захотеть, чтобы свобода изменила реализацию в будущем (значительная строка по сравнению с основным столбцом) и не позволяла клиентам писать код, который сильно зависит от того, является ли реализация главной строкой или столбцом. Попросив клиентов принять возвращаемые значения как const ref, матричный класс может возвращать константы или значения без каких-либо изменений в код клиента. Независимо от того, известно ли первоначальное обоснование, я хотел бы это знать.