Запитання з тегом «rvalue-reference»

Посилання на rvalue - це нова мовна функція в C ++ 11, що представляє посилання на rvalue. Разом із зведенням посилань вони використовуються для реалізації та забезпечення семантики переміщення та ідеального пересилання.

4
Що означає T&& (подвійний амперсанд) в C ++ 11?
Я розглядав деякі нові функції C ++ 11, і я помітив, що це подвійний амперсанд у оголошенні змінних, як T&& var. Для початку, як називається цей звір? Я хотів би, щоб Google дозволив нам шукати такі розділові знаки. Що саме це означає? На перший погляд, це здається подвійним посиланням (як …

6
Які основні цілі використання std :: forward та які проблеми вона вирішує?
У ідеальній переадресації std::forwardвикористовується для перетворення названих посилань на rvalue t1та t2в неназвані посилання rvalue. Яка мета цього робити? Як би це вплинуло на викликану функцію, innerякщо ми залишимо t1& t2як lvalues? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

6
C ++ 11 переоцінює та змішує зміщення семантики (виписка із повернення)
Я намагаюся зрозуміти рецензії на значення і перемістити семантику C ++ 11. Яка різниця між цими прикладами, і який із них не буде робити жодної векторної копії? Перший приклад std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Другий приклад std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; …

6
Переміщення захоплення в лямбда
Як я можу зафіксувати переміщення (також відоме як посилання на значення rvalue) у лямбі C ++ 11? Я намагаюся написати щось подібне: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };



1
Як би один виклик std :: переслати всі аргументи у різноманітній функції?
Я просто писав загальну фабрику об'єктів і використовував мета-бібліотеку boost-препроцесора для створення варіативного шаблону (використовуючи 2010, і він їх не підтримує). Моя функція використовує посилання на rval і std::forwardробити ідеальну переадресацію, і це змусило мене задуматися ... коли C ++ 0X вийде, і у мене був стандартний компілятор, я б …


1
C ++ 11 make_pair із зазначеними параметрами шаблону не компілюється
Я просто бавився з g ++ 4.7 (одним із пізніших знімків) з увімкненим -std = c ++ 11. Я намагався скомпілювати деякі мої існуючі основи коду, і один випадок, який не вдався, дещо бентежить мене. Буду вдячний, якщо хтось зможе пояснити, що відбувається. Ось код: #include <utility> #include <iostream> #include …

5
Чи є випадки, коли повернення посилання на RValue (&&) є корисним?
Чи є причина, коли функція повинна повертати посилання RValue ? Техніка, або фокус, або ідіома чи шаблон? MyClass&& func( ... ); Я усвідомлюю небезпеку повернення посилань загалом, але іноді ми все одно робимо це, чи не так? T& T::operator=(T)це лише один ідіоматичний приклад. Але як щодо T&& func(...)? Чи є …

3
Значення замикання лямбда можуть бути передані як референтні параметри rvalue
Я виявив, що lvalueлямбда-закриття завжди можна передавати як rvalueпараметри функції. Дивіться наступну просту демонстрацію. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function …

2
Чому тут змінна enum - релевантна?
Приклад: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Я отримую таку помилку, коли компілюю це: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.