Rvalue ссылки, копирование и перемещение - PullRequest
2 голосов
/ 05 августа 2020

Рассмотрим следующий раздел кода для свопа:

//for some type T
void swap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

и этот ниже:

//for some type T
void swap(T& a, T& b) {
    T temp = static_cast<T&&>(a);
    a = static_cast<T&&>(b);
    b = static_cast<T&&>(temp);
}

У меня есть следующие сомнения: В чем разница между ними? Я имею в виду, почему первый своп дороже второго?

Ссылка: Язык программирования c ++ 7.7.2

1 Ответ

2 голосов
/ 05 августа 2020

В чем разница между ними? Я имею в виду, почему первый своп дороже второго?

Второй разрешает перемещение для типов, которые его поддерживают (ie с оператором присваивания перемещения). Эти типы включают стандартный вектор, строку и т.д. c.

Для базовых типов c (int, bool, et c.), Которые не поддерживают перемещение семанти c, нет никакой разницы , это обычная копия.

...