Я прочитал категории значений. Я наткнулся на это утверждение < /p>
xvalue < /strong>
Следующие выражения являются xvalue Expressions: < /p>
< Li>a.m, член объекта, где a-это rvalue, а m-нестатический элемент данных; /> < /ul>
< /blockquote>
Кроме того, это написано на одной и той же странице < /p>
c ++ 11
с введением семантики перемещения в C ++ 11, категории значений были пересмотрены, чтобы характеризовать два независимых свойства экспрессии [5]:
p> p>
p> p> p>
P> p> p>
p> PRE определили, чтобы характеризовать два независимых объекта экспрессии. Identity : можно определить, относится ли выражение к той же сущности, что и другое выражение, например, путем сравнения адресов объектов или функций, которые они идентифицируют (получено прямо или косвенно);
имеет идентичность. Я могу применить определение идентификации в случае STD :: MOVE (a) , поскольку оно представляет тот же объект, что и . Хотя мы не можем напрямую принимать его адрес, но мы можем использовать ссылки на RVALUE. Как следующее < /p>
#include
int main() {
int a = 5;
int&& r_ref = std::move(a);
std::cout
xvalue < /strong>
Следующие выражения представляют собой выражения xvalue: < /p>
Любое выражение, которое проектирует временную объект, после временной объекта; C ++ 17)
[/list]
Подробнее здесь: [url]https://stackoverflow.com/questions/79656347/why-is-the-member-of-object-expression-an-xvalue-not-prvalue[/url]
Я прочитал категории значений. Я наткнулся на это утверждение < /p>
xvalue < /strong>
Следующие выражения являются xvalue Expressions: < /p> [list] < Li>a.m, член объекта, где a-это rvalue, а m-нестатический элемент данных; /> < /ul> < /blockquote> Кроме того, это написано на одной и той же странице < /p>
c ++ 11
с введением семантики перемещения в C ++ 11, категории значений были пересмотрены, чтобы характеризовать два независимых свойства экспрессии [5]:
p> p> p> p> p> P> p> p> p> PRE определили, чтобы характеризовать два независимых объекта экспрессии. Identity : можно определить, относится ли выражение к той же сущности, что и другое выражение, например, путем сравнения адресов объектов или функций, которые они идентифицируют (получено прямо или косвенно);
[code]xvalue[/code] имеет идентичность. Я могу применить определение идентификации в случае STD :: MOVE (a) , поскольку оно представляет тот же объект, что и . Хотя мы не можем напрямую принимать его адрес, но мы можем использовать ссылки на RVALUE. Как следующее < /p> [code]#include
int main() { int a = 5; int&& r_ref = std::move(a);
std::cout
xvalue < /strong>
Следующие выражения представляют собой выражения xvalue: < /p>
Любое выражение, которое проектирует временную объект, после временной объекта; C ++ 17) [/list]
Стандарт C++ ISO/IEC JTC1 SC22 WG21 N4860 гласит, что временные объекты не создаются без необходимости. В нем перечислены ситуации, когда материализуются временные объекты, в том числе для оператора sizeof:
В C++03 выражение представляет собой либо rvalue , либо lvalue .
В C++11 выражение может быть:
Ценность Ценность xvalue glvalue ценность
Две категории превратились в пять категорий.
Что это за новые категории выражений? Как эти новые категории...
Предположим, у нас есть некоторый некопируемый и неперемещаемый тип Foo и функция
int f(const Foo& foo) { ... // каким-то образом вычисляем результат в зависимости от значения foo. } Теперь предположим, что мы хотим вызвать эту функцию следующим...
Это смешной вопрос, но, видимо, не для MSVC. Итак, по какому правилу стандарта C++20 вызов prvalue типа int бессмысленен?
// clang: nope, gcc: nope, msvc: why not?
static_assert(requires { requires noexcept(int{}()); });
Моя диаграмма в Microsoft Forms в Visual Studio не может отображать даты в правильном формате. Когда вы помещаете целые числа, это работает отлично, но числа, отформатированные так, чтобы они выглядели как даты, не работают.
Это моя таблица в sqlite...