Переместить или оптимизация именованного возвращаемого значения (NRVO)?

Допустим, у нас есть следующий код:

std::vector<int> f()
{
  std::vector<int> y;
  ...
  return y;
} 

std::vector<int> x = ...
x = f();

Кажется, что у компилятора есть два подхода:

(a) NRVO: уничтожить x, затем построить f () в место x.
(b) Перемещение: построить f () во временном пространстве, переместить f () в x, уничтожить f ().

Может ли компилятор использовать любой из подходов в соответствии со стандартом?

32
задан bitek 15 March 2013 в 13:21
поделиться