Отвечая на вопрос первым, они на самом деле не постоянны.Вы не можете связать один с неконстантной ссылкой.Вероятно, это было сделано для предотвращения ошибок в определенных ситуациях, когда они будут передаваться в качестве параметра функции, которая их изменяет, только для изменений, которые будут внесены во временный объект, а не в намеченную цель.
Разрешить неОперации -const для временного особенно полезны, когда вы хотите вызвать «swap» для него с локальной переменной.
std::vector<T> local;
method_that_returns_a_vector().swap( local );
До появления семантики перемещения это считалось наиболее эффективным способом возвратабольшой набор данных и получить его без копирования всех данных.