Что такое std :: move () и когда его следует использовать?

Попробуйте это в интерпретаторе:

try:
    fsock = open("/bla")
except IOError:
    print "Caught"

print "continue"

Важно, что это пустая строка после отступа. Я использую интерпретатор python 2.6, и он выдает ту же синтаксическую ошибку, что и вы.

Это потому, что интерпретатор ожидает, что отдельные блоки будут разделены пустыми строками. Кроме того, пустая строка (два новых строчных символа) указывает конец блока и что интерпретатор должен выполнить его.

546
задан artm 5 April 2019 в 05:05
поделиться

1 ответ

Страница Википедии на C++11 Ссылки на R-значения и конструкторы перемещения

  1. В C++11, в дополнение к конструкторам копирования, объекты могут иметь конструкторы перемещения.
    (И в дополнение к операторам присваивания copy, они имеют операторы присваивания move.)
  2. Конструктор move используется вместо конструктора copy, если объект имеет тип "rvalue-reference" (Type &&).
  3. std::move() - это приведение, которое создает rvalue-ссылку на объект, чтобы можно было перемещаться от него.

Это новый для C++ способ избежать копирования. Например, используя конструктор move, std::vector мог бы просто скопировать свой внутренний указатель на данные в новый объект, оставив перемещаемый объект в некорректном состоянии, избегая копирования всех данных. Это было бы корректно с точки зрения C++.

Попробуйте погуглить на предмет семантики перемещения, rvalue, perfect forwarding.

249
ответ дан 22 November 2019 в 22:09
поделиться
Другие вопросы по тегам:

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