Извлечь последнее слово в предложении / строке?

Семантика перемещения основана на ссылках rvalue . Rvalue - временный объект, который будет уничтожен в конце выражения. В текущем C ++ значения r привязаны только к const ссылкам. C ++ 1x позволит ссылаться на ссылки не на const rvalue, записанные T&&, которые являются ссылками на объекты rvalue. Так как rvalue будет умирать в конце выражения, вы можете украсть его данные . Вместо того, чтобы копировать в другой объект, вы переместите свои данные в него.

class X {
public: 
  X(X&& rhs) // ctor taking an rvalue reference, so-called move-ctor
    : data_()
  {
     // since 'x' is an rvalue object, we can steal its data
     this->swap(std::move(rhs));
     // this will leave rhs with the empty data
  }
  void swap(X&& rhs);
  // ... 
};

// ...

X f();

X x = f(); // f() returns result as rvalue, so this calls move-ctor

В приведенном выше коде со старыми компиляторами результат f() был скопирован в x с помощью конструктора копий X. Если ваш компилятор поддерживает перемещение семантики, а X имеет конструктор move, то вместо этого вызывается. Поскольку аргумент rhs является rvalue , мы знаем, что он больше не нужен, и мы можем украсть его значение. Таким образом, значение перемещено из неназванного временного объекта, возвращенного с f() в x (в то время как данные x, инициализированные до пустого X, перемещаются во временное, что будет уничтожить после назначения).

13
задан hippietrail 17 September 2014 в 18:26
поделиться