Привязка временных ссылок к ссылкам
Возможный дубликат:
Почему неконстантная ссылка не может привязываться к временному объекту?
Прежде всего, я понимаю, что стандартный мандат, согласно которому временные файлы могут быть привязаны только к константным ссылкам, и, насколько я понимаю, в этом случае время жизни временного объекта связано со временем жизни ссылки.
Кроме "потому что стандарт говорит так...", почему такая хорошая идея - предотвращать привязку временных файлов к общим (т.е. неконстантным) ссылкам??
Рассмотрим следующее, где у нас есть подпрограмма, которая требует некоторого рабочего пространства:
void foo(std::vector<mytype> &data, std::vector<mytype> &work)
{ // we do something to DATA but we need to use the workspace WORK
// we may resize WORK, write to it, generally use it in a non-const way
// we want to pass WORK as a parameter because we want to have the option
// of pre-allocating it (for efficiency, FOO may, but is not always, called
// inside a loop)
}
Почему было бы так плохо делать одиночный звонок foo
следующее:
// case 1
// DATA already created elsewhere
foo(data, std::vector<mytype>() );
Конечно, мы могли бы сделать что-то вроде этого:
// case 2
// DATA already created elsewhere
std::vector<mytype> work;
foo(data, work);
Но тогда жизнь work
продлен до конца ограждающего блока, что может быть нежелательным.
Я знаю, что есть способы обойти подобные вещи, но случай 1 здесь был бы изящным способом делать вещи, за исключением того, что нам это не разрешено.