Описание тега prvalue

1 ответ

Допустимо ли исключение prvalue в выражениях броска

В §[except.throw]стандарт гласит, что создание исключительной копии инициализирует объект исключения из выражения выброса Создание исключительной копии инициализирует (11.6, 15.8) временный объект, называемый объектом исключения Почему тогда следующ…
27 авг '18 в 23:55
1 ответ

Q: почему _rvalues_ были переименованы в _prvalues_? (чистые значения)

Этот документ является источником этих изменений по сравнению с C++ 11: n3055. II. Обзор изменений Rvalues, как в настоящее время известно в основных предложениях языка, переименовывается в "prvalues" ("чистые" rvalues). Значение lvalues не изменило…
02 дек '17 в 13:46
1 ответ

Почему return throw std::exception() принимается в функции void?

Я по ошибке вставил throw заявление после return со следующим конечным результатом: void DXManager::initialize(const std::shared_ptr<nae::Context>& ctx_ptr) { // ... if (FAILED(result)) { return throw std::exception("Failed to enumerate di…
28 авг '18 в 13:44
2 ответа

C++11: объявляет ли decltype(1+2) xvalue или prvalue?

Объявляет ли decltype(1+2) xvalue или prvalue? cppreference говорит, что decltype (выражение) объявит: 1. T&&, если выражение является значением xvalue 2. T, если выражение является значением prvalue 3. T& if, если выражение равно lvalue Но мой вопр…
17 апр '17 в 02:01
2 ответа

Увеличение продолжительности жизни, значения и значения

После хорошо принятого ответа на этот вопрос Допускают ли ссылки на rvalue висячие ссылки? Казалось бы, значения xvalue не продлеваются, когда они присваиваются rvalue-ссылке lvalue, как в вопросе. Однако, когда я делаю это #include <iostream>…
24 фев '17 в 15:00
2 ответа

xvalues vs prvalues: what does identity property add

Прошу прощения за широту вопроса, просто все эти детали тесно взаимосвязаны.. Я пытался понять разницу между конкретно двумя категориями значений - xvalues ​​и prvalues, но все же я запутался. Так или иначе, ментальная модель, которую я пытался разр…
26 июл '17 в 04:56
2 ответа

Как мы можем проверить, может ли выражение определенного типа вызываться с помощью prvalue?

С C++17 у нас есть новое is_invocable и представьте новые ценности, которые на самом деле не являются ценностями. Это позволяет вам создавать объект без необходимости сначала логически его конструировать, а затем исключать конструкцию. Я столкнулся …
09 янв '18 в 18:32
3 ответа

"выражение должно быть l-значением или указателем функции" при получении адреса этого

Я пытаюсь сделать это в C++: class Abc { int callFunction1() }; void function1(Abc** c1) {//do something} int Abc::callFunction1() { function1(&this); return 0; } И я получаю ошибку "выражение должно быть l-значением или обозначением функции" в …
20 сен '17 в 19:56
1 ответ

Переместить значение в аргумент шаблона функции или нет?

Мой вопрос заключается в том, имеет ли смысл std::move (или нет) prvalue в шаблон функции всеобщего охвата, который соответственно принимает универсальную ссылку T&& в своей подписи. Также я хотел бы знать, играет ли роль в этом решении elision/RVO …
2 ответа

Что это означает "значение типа" в стандарте C++ N3337 5.2.10, пункт 7?

В C++ проект стандарта N3337 раздел 5.2.10 Reinterpret cast пункт 7 (выделено мной): Указатель на объект может быть явно преобразован в указатель на объект другого типа. Когда значение v указателя типа "указатель на T1" преобразуется в тип "указател…
28 окт '18 в 14:10
2 ответа

Cv-квалификации prvalues ​​(пересмотренный)

Это продолжение моего предыдущего вопроса, где очевидное согласие заключалось в том, что изменение в обработке cv-квалификаций prvalues ​​было просто довольно незначительным и несущественным изменением, предназначенным для устранения некоторых несоо…
1 ответ

Вызов конструктора является предварительным выражением

В стандарте C++ можно найти примеры выражений prvalue: "prvalue Следующие выражения являются выражениями prvalue: литерал (кроме строкового литерала), такой как 42, true или nullptr; вызов функции или перегруженное операторное выражение не возвращае…
23 май '17 в 17:58
0 ответов

Может ли вторая ссылка Const продлить срок службы временного

Фон: Я заметил, что подпись std::max: шаблон const T& max(const T&, const T&); и я задавался вопросом о последствиях возвращения ссылки на const T... Если мы передадим два L-значения, то имеет смысл вернуть ссылку на одно из двух. Но если мы переда…
20 май '17 в 18:38
1 ответ

Поведенческие различия в 5 против стандартного: переместить (5)

Я прочитал все основные вопросы по SO о различных категориях значений, но до сих пор не ясно понимаю разницу между, в данном случае, xvalues ​​и prvalues. Я знаю, что, как и все glvalues, xvalues ​​может иметь свой динамический тип, отличный от стат…
19 июл '17 в 12:31
1 ответ

Какие шаги я должен предпринять, чтобы определить категорию значения выражения?

Я довольно озадачен определением ценностной категории выражения. Не могли бы вы предоставить основные шаги, которые следует предпринять (что следует проанализировать) для определения категории значения выражения?
30 май '19 в 18:51
1 ответ

Почему вызов функции является xvalue (если возвращаемый тип является rvalue)?

Допустим, у нас есть функция: struct A { int m; }; A&& f(); Насколько я знаю выражения: f(); f().m; оба xvalue. Но почему? Почему они не prvalue? Я немного смущен.
24 май '19 в 10:19
0 ответов

Примеры rvalue, lvalues, xvalues, glvalues ​​и prvalues?

Этот пост Что такое rvalues, lvalues, xvalues, glvalues ​​и prvalues? предоставляет определения rvalue, lvalues, xvalues, glvalues ​​и prvalues, но я не вижу примеров. Я думаю, что у меня есть четкое представление о lvalues ​​и rvalues, но не так мн…
26 апр '20 в 16:37
2 ответа

Некоторые различия между xvalue и prvalue

В последнее время я внимательно изучаю категории C++. Разница между lvalue и rvalue кажется очевидной, но я запутался, когда дело доходит до prvalue и xvalue. Учитывая приведенный ниже пример: #include <iostream> using std::cout; using std::en…
16 окт '20 в 18:42
2 ответа

Заставить ++o++ жаловаться на типы с определяемыми пользователем пре- и постфиксными операторами приращения

Я ищу способ предотвратить ++x++ от работы с типами с определяемыми пользователем префиксными и постфиксными операторами приращения. Для встроенных типов тип результата постфиксного оператора - это не lvalue, а выражение prvalue, и компиляторы хорош…
24 мар '21 в 23:43
1 ответ

Компилятор C++17 (gcc или Microsoft Visual C++), имеет ли он параметр, запрещающий функцию «не создавать временный»

Как я могу сказать компилятору С ++ 17 создать временное устройство в следующем случае (т.е. компилятор C ++ 17 должен учитывать операцию копирования / перемещения, как это делают компиляторы C ++ 11 и C ++ 14) class A{ public: A(){} A(const A&)…
18 май '21 в 13:49