«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `std::move` называется `std::move`, если на самом деле он ничего не перемещает?

Почему `std::move` называется `std::move`, если на самом деле он ничего не перемещает?

Опубликовано 16 ноября 2024 г.
Просматривать:300

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

Почему 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