1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
1 | ||||||
Rvalue vector30.05.2016, 12:41. Показов 1666. Ответов 31
Метки нет (Все метки)
Как это?
0
|
30.05.2016, 12:41 | |
Ответы с готовыми решениями:
31
Ссылка на rvalue, является ли она сама rvalue? C++ expressions - rvalue, glvalue, prvalue, xvalue, lvalue, а также rvalue reference: что есть что? RVALUE Ссылка, error: cannot bind non-const lvalue reference of type 'String&' to an rvalue of type 'String'| error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main |
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
30.05.2016, 12:45 | 2 |
daslex, я могу дико ошибаться, но по определению STL контейнеры хранят копию и следовательно, она копирует ваши нули и они вовсе не rvalue.
а 2 строка будет валидной, если первая скомпилируется и второя будет содержать std::move P.S. Сложные у вас вечно вопрос) Где вопросики про что такое переменная - на такие я бы мог ответить, а тут снова ждать сторожил.
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|||||||||||
30.05.2016, 13:31 [ТС] | 3 | ||||||||||
Я задам вопрос немного по-другому. Как вот в эту функцию
Мне нужен такой rvalue, который не lvalue. Добавлено через 35 минут Вот так можно.
Как связаться с такой ссылкой на элемент такого контейнера, не понимаю.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
30.05.2016, 13:39 | 4 |
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
30.05.2016, 13:48 [ТС] | 5 | |||||
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||||||||||
30.05.2016, 14:27 | 7 | ||||||||||
daslex, Че то нифига не понял. Вот висячая ссылка:
Чуть изменил, чтоб совсем похоже было:
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
30.05.2016, 14:53 [ТС] | 8 |
Эффективный и современный С++.
1.3 Знакомство с decltype. Только название функции у меня foo. Я не могу понять как поймать висячую ссылку. Что такое висячие ссылки я знаю. Я хочу её словить в конкретном примере.
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
30.05.2016, 15:03 | 9 |
daslex, Так у меня ж в выводе Все адреса совпадают, т.е. - это один объект.
В третьей строке - вывод из деструктора, т.е. объект уничтожен. В четвертой строке видно мусор (UB, в данном случае проявилось так) В пятой строке видно измененоое значение висячей ссылки (42). Теперь надо ловить перезапись этой памяти. Это легче сделать из первого моего примера (там висячая ссылка указывает на стек, т.е. просто вызвать несколько новых функций и убедиться что данные затрутся)
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
30.05.2016, 15:07 [ТС] | 10 |
Пример тяжело читается...
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
30.05.2016, 15:09 | 11 |
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
30.05.2016, 15:24 [ТС] | 12 |
Время немного нужно. Просто отклонилось от простого минималистичного немного.
Добавлено через 9 минут Ваш пример и не компилируется в clang. Добавлено через 42 секунды А мне нужно понять, о чём толкует автор книги. Добавлено через 1 минуту я вижу xvalue, но не вижу висячести. ( в своём варианте кода)
0
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
|
||||||
30.05.2016, 15:33 | 13 | |||||
Действительно ошибаетесь. Первая строка не компилируется не потому, что нули не rvalue (они то как раз rvalue, а точней prvalue, которые являются rvalue), а потому что в терминологии стандарта ссылка - не объект, а посему нельзя хранить массив ссылок например, нельзя создать указатель на ссылку (но ссылку на указатель можно). Но если бы можно было создать такой вектор, как в первой строке, то вторая все равно-бы не скомпилировалась, ибо тип объекта на который ссылается ссылка и тип ссылки - разные
Добавлено через 8 минут Тоже самое что и висячий указатель, только ссылка:
2
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
30.05.2016, 15:34 | 14 |
Замените
decltype(auto) foo(T& cont) на decltype(auto) foo(T&& cont) http://rextester.com/live/ULEC6490
1
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
30.05.2016, 15:36 | 15 | |||||
1
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
|
|
30.05.2016, 15:40 | 16 |
1
|
avgoor
|
|||||
30.05.2016, 15:44
#17
|
|||||
Не по теме: В данном случае, все-таки, правильнее использовать "генерализованную ссылку":
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
30.05.2016, 15:49 [ТС] | 18 |
Не пойдёт. Это получается универсальная ссылка. Которой проблема потом решается.
Это как сбежать не разобравшись. Получится xvalue, так я пробовал. notAll, Не пойдёт. Это получается универсальная ссылка. Которой проблема потом решается.
0
|
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
|
|
30.05.2016, 15:51 | 19 |
avgoor, Да, только будьте готовы на таком примере объяснить человеку, что такое Collapsing rule
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
30.05.2016, 15:56 [ТС] | 20 | |||||
Важно: Я не понимаю о чём пишет автор. Поэтому нечаянно могу и других путать.
Добавлено через 4 минуты
Должна же быть проблема, коли о ней написано.
0
|
30.05.2016, 15:56 | |
30.05.2016, 15:56 | |
Помогаю со студенческими работами здесь
20
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) Цикл: Создайте класс Matrix на базе вектора vector<vector<int>>. Ошибка [Linker error] undefined reference to `Vector::Vector(int)' vector<Struct2{int,vector<struct1>}> или множественное наследование ... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |