Почему std::move называется std::move?
Функция std::move, несмотря на свое название, не имеет названия на самом деле вообще ничего не двигайте. Он просто преобразует lvalue (выражение, ссылающееся на объект) в rvalue (выражение, представляющее временный объект). Это преобразование выполняется посредством приведения к категории xvalue, которая отличается от lvalues и prvalues.
Причина такого выбора именования уходит корнями в историю этой концепции. Первоначально операция перемещения была введена как способ эффективного обмена значениями без их копирования. Ранний синтаксис для этого включал приведение lvalue к rvalue с помощью static_cast. Чтобы улучшить читабельность и передать цель этих приведений, ключевое слово move было введено в качестве синтаксического сахара для static_cast.
В контексте того времени использование термина «перемещение» должно было указать цель этих приведений. : включить семантику перемещения. В результате код передает не точное техническое действие (приведение к rvalue), а скорее желаемый результат (перемещение объекта).
С годами концепция lvalues и rvalues превратилась в Категории значений, которые мы имеем сегодня, где значения x представляют объекты, которые были преобразованы в значения r. В результате ключевое слово move может быть воспринято как вводящее в заблуждение, поскольку оно подразумевает только действие, которое может произойти, а может и не произойти.
Однако выбор использования ключевого слова move был сохранен для сохранения читабельности. и избежать путаницы, которая может возникнуть из-за незнакомого синтаксиса, такого как cast_to_xvalue. Функция std::move остается ценной утилитой, которая позволяет программистам кратко выражать семантику перемещения, даже если ее имя не совсем отражает технические детали ее работы.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3