Почему параметры по значению исключаются из NRVO?

Представьте:

S f(S a) {
  return a;
}

Почему нельзя использовать псевдоним a и слот возвращаемого значения?

S s = f(t);
S s = t; // can't generally transform it to this :(

Спецификация не допускает это преобразование, если конструктор копирования S имеет побочные эффекты. Вместо этого требуется как минимум две копии (одна от t до a , и один от a до возвращаемого значения, а другой от возвращаемого значения до s , и только последнее может быть опущено. Обратите внимание, что я написал = t выше, чтобы представить факт копирования t в f's a , единственная копия, которая по-прежнему будет обязательной при наличии побочных эффектов конструктора перемещения / копирования. ).

Почему?

38
задан Johannes Schaub - litb 13 November 2012 в 10:03
поделиться