Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180

Xvalue и prvalue

05.12.2015, 14:22. Показов 2632. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
А в чем, собственно, разница?

И вообще, есть какая-то разница между следующими функциями:
C++
1
2
int&& func();
int func();
cppreference утверждает, что xvalue имеют некое identity. Ага, думаю я. Раз у них есть это самое identity, то, вероятно, я могу взять. их адрес.

C++
1
2
3
4
int&& func(){return 5;};
 
main()
{&func();};
Облом. В чем, всё же сакральный смысл xvalue и int&& func();

Спасибо.

Добавлено через 12 минут
Хм... И вообще,
int&& func();
у меня всегда ноль вроде как возвращает. Что-то я где-то не разумею 0_о...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2015, 14:22
Ответы с готовыми решениями:

Rvalue, lvalue, xvalue, prvalue, glvalue
Не в той теме начали обсуждать. Создам новую. то, что знаю я (выучил к собесед-ию), но глубокого понимания у меня нет: lvalue - если...

Lvalue, xvalue, glvalue, rvalue, prvalue
Для чего понадобилось такое разделение выражений lvalue, xvalue, glvalue, rvalue, prvalue. Для конкретной категории очень желательно...

Что же это такое glvalue, xvalue, prvalue
Ребята помогите мне разобраться с этими понятиями. Как известно, чтобы что-то понять самому, надо уметь об этом объяснить кому-то...

25
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
05.12.2015, 19:39  [ТС]
Студворк — интернет-сервис помощи студентам
А, это так... глупость...

Попытка заставить локальный объект жить вне области видимости создавшей ее функции чуть дольше, чем до ближайшего ";".
Некромантия, в общем.

Вряд ли это вообще возможно.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.12.2015, 19:41
Цитата Сообщение от Mirmik Посмотреть сообщение
Хм... Мы, кажется немного не сошлись во мнении, адрес чего мы хотим получить всё же.
Я вот решил это так.
А адрес чего Вам нужен?
Я Вам показал взятие адреса функции, попытка чего была в 1-м посте.
Имя функции - это и будет адресом функции. Зачем еще что-то для этого придумывать.

Добавлено через 1 минуту
C++
1
2
3
4
int&& func(){return (int&&)5;}; //UB, но для краткости.
 
int main()
{func;};
0
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
05.12.2015, 19:45  [ТС]
Так вот я и говорю, не договорились. Я то хотел адрес того объекта, который якобы имеет identity по терминологии cppreference. Короче, указатель на этот объект...

Добавлено через 1 минуту
В общем-то я даже не хотел его получить. Я просто таким способом проверил, правильно ли я понял то, что там написано.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.12.2015, 21:13
Если я правильно понял, то та проверка правильности понимания - это такая своеобразная попытка забрать адрес объекта непосредственно внутри return, избегая всю работу функции. Попытка своеобразного goto, игнорирующего весь кусок блока кода функции.

Я могу сказать только то, что попытки взятия такого адреса ничего не дадут. Как можно взять адрес у уже уничтоженного объекта? Ответ - никак. Нельзя взять адрес у того, чего нет.
Функция вычислила выражение и переместила его. А такая попытка - это попытка взятия того адреса, откуда уже произошло перемещение. "Там уже разруха и хаос".

В стандарте ни о каких identity у xvalue не писано.
3.10 Lvalues and rvalues
An xvalue (an “eXpiring” value) also refers to an object, usually near the end of its lifetime (so that its resources may be moved, for example). An xvalue is the result of certain kinds of expressions involving rvalue references (8.3.2). [Example: The result of calling a function whose return type is an rvalue reference is an xvalue. —end example ]
Добавлено через 2 минуты
________________________________________ _____________
Если я ошибся, то пусть поправят. Я мог неправильно написать.|
________________________________________ _____________|
0
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
05.12.2015, 22:51  [ТС]
daslex
Ну, отчасти да... Впрочем, как вы понимаете, к моменту, когда я это писал, я только прощупывал почву и подобных тонкостей не понимал.

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

Так что адрес уничтоженного объекта получить можно.


P.S.
Я стандарт не читал... я все больше сайт cppreference смотрю. Простите.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
22.04.2018, 00:42
Цитата Сообщение от Mirmik Посмотреть сообщение
cppreference утверждает, что xvalue имеют некое identity. Ага, думаю я. Раз у них есть это самое identity, то, вероятно, я могу взять. их адрес.
Цитата Сообщение от http://eel.is/c++draft/expr.unary.op#3
The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue or a qualified-id.
123
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2018, 00:42
Помогаю со студенческими работами здесь

C++ expressions - rvalue, glvalue, prvalue, xvalue, lvalue, а также rvalue reference: что есть что?
Доброго времени суток, не понимаю до конца деление С++ - выражений (приложение 1). Lvalue вроде просто - всё, от чего можно брать адрес. А...

Value categories. Является ли выражение xvalue?
Знакомлюсь с xvalue. Прочитал описание на cppreference. Согласно описанию, xvalue объект проще всего получить через std::move. ...

[xvalue][msvs/gcc][bug] member function with ref-qualifier
добрый вечер. следующий код работает как и ожидается. и прекрасно компиляется gcc: http://rextester.com/VASW79342 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru