Что такое ссылка R-Value, которая вот-вот появится в следующем стандарте C++?Что такое ссылка R-Value, которая вот-вот появится в следующем стандарте C++?
ответ
Вот очень долго article от Stephan Т. Lavavej
Остерегайтесь, однако, он упоминает в более поздней видео лекции, что статья основана на rvalue-ссылках v1, а правила впоследствии изменились на «v2». В исходной версии ссылки rvalue свяжутся с lvalues, но затем комитет изменил правила. Просто предупреждение. – woolstar
Это позволяет различать код, который назвал вас передавая ссылку на г-значение или 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
с помощью ссылки г-значение, мы можем позволить перейти в ссылках на временных, таких, как в первом примере выше:
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
Конструктор движение действует как конструктор копирования, но он определен взять ссылку на г-значение, а не L-значение (константный) ссылки. Разрешено использовать семантику r-значения для перемещения данных из временного, созданного в create_vector
, и вставлять их в аргумент consume_vector
, не делая дорогой копии всех данных в векторе.
create_vector вернется по значению, а не по ссылке rvalue (это будет ссылка на временную). Обратите внимание, что типы возвращаемых значений уже являются значениями r. –
Посмотрите на Why are C++0x rvalue reference not the default?, что объясняет их практическое использование достаточно хорошо.
- 1. Что такое основное постоянное выражение в стандарте C++ 11?
- 2. Что мне недостает в стандарте C++ 11?
- 3. Что означает ссылка на ссылку в C++? (Не ссылка Rvalue)
- 4. Rvalue (Ссылка) в C++ 11
- 5. Что такое операция потребления в стандарте C++ 11?
- 6. Что такое «статья 10» в стандарте C++ 03?
- 7. C++: const ссылка на rvalue
- 8. Передача rvalue как ссылка
- 9. Что такое переменные-члены ссылочного значения rvalue
- 10. Что такое обратная ссылка в C?
- 11. Что такое ссылка на ссылку в C++?
- 12. Что такое квадратная скобка «[]» в следующем синтаксисе
- 13. оборванная Ссылка на RValue
- 14. Что такое 'id' в следующем коде? в Objective C
- 15. Почему ссылка пересылки не выводит ссылку rvalue в случае rvalue?
- 16. Что такое «ссылки rvalue для этого»?
- 17. Что такое LINQ в следующем коде?
- 18. Что такое _? означают в следующем регулярном выражении?
- 19. Что такое цель ярлыка в «следующем» заявлении?
- 20. C++ 0x Rvalue ссылка шаблон вывод аргумент
- 21. Ссылка возврата и Rvalue
- 22. C++: справочная память rvalue
- 23. Что такое `android.accounts.Account.type` ссылка?
- 24. Что такое круговая ссылка?
- 25. Что такое векторная ссылка?
- 26. Что такое ссылка Microsoft.NETCore.UniversalWindowsPlatform?
- 27. Что такое двойная ссылка?
- 28. Что такое неизменяемая ссылка?
- 29. Может внутренний STL контейнер структура изменения в следующем стандарте
- 30. Что такое тривиальная функция?
Я вижу этот вопрос один день становится ++ эквивалент C из «Как присоединиться к списку строк вместе в C#?»), То спросил и ответил каждые пару дней! –