Что такое ссылка на R-Value, которая появится в следующем стандарте C++?

StackOverflow https://stackoverflow.com/questions/846812

  •  21-08-2019
  •  | 
  •  

Вопрос

Что такое ссылка на R-Value, которая появится в следующем стандарте C++?

Это было полезно?

Решение 3

Вот это очень долго статья от Стефана Т.Лававей

Другие советы

Взгляни на Почему ссылка на rvalue в C++0x не используется по умолчанию? , что достаточно хорошо объясняет их практическое использование.

Это позволяет вам различать код, который вызвал вас, передавая ссылку на r-значение или l-значение.Например:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

Используя ссылку на значение r, мы можем разрешить передачу ссылок на временные объекты, как в первом примере выше:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

Это более интересно, когда мы хотим передать возвращаемое значение функции, создающей объект, другой функции, которая использует этот объект.

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

Конструктор перемещения действует как конструктор копирования, но он определен так, чтобы принимать ссылку на значение r, а не на ссылку на значение l (const).Разрешено использовать семантику r-значения для перемещения данных из временного хранилища, созданного в create_vector и подтолкнуть их к спору consume_vector без дорогостоящего копирования всех данных в векторе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top