Вопрос по c++, c++11 – Переместить семантику для оператора преобразования

7

Какой синтаксис для оператора подвижного преобразования?

У меня есть оберткаobj, который имеетobj оператор преобразования:

class wrap {
public:
   operator obj() { ... }
private:
   obj data_;
};

Как я могу узнать,data_ должны быть скопированы или перемещены?

@ildjarn вопрос касается семантики перемещения в операторе преобразования, а не о char * или std :: string. Candy Chiu
Как ты мог двигатьсяdata_ вstd::string тем не мение? Еслиdata_ былиstd::string Кроме того, этот вопрос будет иметь гораздо больше смысла. ildjarn
Хорошо, это имеет больше смысла. Вы просто выбрали наихудший тип данных в качестве первого примера. ; -] ildjarn

Ваш Ответ

1   ответ
10

class wrap {
public:
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
private:
   obj data_;
};

Первая версия будет вызвана, когда вторая версия не может быть вызвана (то есть:wrap преобразуемый экземпляр не является временным или нет явного использованияstd::move).

Обратите внимание, что Visual Studio не реализует этот аспект ссылок на r-значение.

Error: User Rate Limit Exceeded
const&Error: User Rate Limit Exceededconst.
Error: User Rate Limit Exceededoperator obj const & () const &Error: User Rate Limit Exceededoperator obj && () &&Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы