Я читаю исходный код STL и понятия не имею, что &&
должен делать адресный оператор. Вот пример кода из stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Имеет ли смысл «Адрес адреса»? Почему у него два оператора адреса вместо одного?
c++
stl
operator-keyword
memory-address
Anarki
источник
источник
&
, он не имел бы ничего общего с оператором address-of, но вместо этого означал бы, что__x
это ссылка.Ответы:
Это код C ++ 11 . В C ++ 11
&&
токен может использоваться для обозначения «ссылки на значение».источник
&&
Новое в C ++ 11.int&& a
означает, что "a" является ссылкой на r-значение.&&
обычно используется только для объявления параметра функции. И это только принимает выражение r-значения. Если вы не знаете, что такое r-значение, простое объяснение состоит в том, что у него нет адреса памяти. Например, число 6 и символ 'v' являются r-значениями.int a
, а является l-значением, однако(a+2)
является r-значением. Например:Надеюсь, что это информативно.
источник
int&& c = std::move( b );
т. Д.&&
является новым в C ++ 11, и это означает, что функция принимает RValue-Reference, то есть ссылку на аргумент, который должен быть уничтожен.источник
Как уже упоминалось в других ответах,
&&
токен в этом контексте является новым для C ++ 0x (следующий стандарт C ++) и представляет собой «ссылку на значение».Rvalue ссылки являются одной из наиболее важных новых вещей в будущем стандарте; они обеспечивают поддержку семантики перемещения в объектах и обеспечивают идеальную пересылку вызовов функций.
Это довольно сложная тема - одним из лучших введений (это не просто краткий обзор ) является статья Стефана Т. Лававея, «Rvalue References: Особенности C ++ 0x в VC10, часть 2»
Обратите внимание, что статья все еще довольно тяжелое чтение, но оно того стоит. И хотя он находится в блоге Microsoft VC ++, вся (или почти вся) информация применима к любому компилятору C ++ 0x.
источник
&&
токен не нов; его смысл в декларациях есть. Но ты знал это.Я считаю, что это оператор переезда.
operator=
оператор присваивания, скажемvector x = vector y
.clear()
Вызов функции звучит так , как будто он удаляет содержимое вектора , чтобы предотвратить утечку памяти. Оператор возвращает указатель на новый вектор.Сюда,
Несмотря на то, что мы дали вектору значения a, вектор b имеет значения. Это магия
operator=()
!MSDN - Как создать конструктор перемещения
источник