Ваш код не является законным. Должно быть либо:
std::vector<int> const& f = foo();
или
std::vector<int> f = foo();
Стандарт разрешает копирование в обоих случаях (по крайней мере, C ++ 03 сделал & mdash; I
Подумайте, C ++ 11 в первом случае исправил ситуацию); это требует этого в
ни один, и я не знаю компилятор, который на самом деле делает копию в
в любом случае. Если вы действительно беспокоитесь о копии, хотя, изменение
декларация от foo
до:
void foo( std::vector<int>& results );
и использование:
std::vector<int> f;
foo( f );
гарантирует, что нигде не будет копий. Это не так красиво,
но если профилирование показывает, что копирование является узким местом, оно должно быть
считается.