++ ( , , ..) : . , : prvalue, xvalue, lvalue, : rvalue , glvalue.
- glvalue ( lvalue) , ;
- prvalue (pure rvalue - rvalue) ,
- xvalue (eXpiring - ) glvalue, , ;
- lvalue ( , lvalue ) glvalue, xvalue;
- rvalue ( , rvalue ) prvalue xvalue.
lvalue
lvalue:
- , , ( C++20) , ,
std::cinstd::endl. rvalue, , , lvalue ( , ); - , lvalue,
std::getline(std::cin, str),std::cout << 1,str1 = str2++it; a = b,a += b,a %= b;++a--a, ;*p, ;a[n]p[n], ,a[n]lvalue ( C++11);a.m, , ,m-,arvalue,m;p->m, , ,m-;a.*mp, ,alvalue,mp;p->*mp, ,mp;a, b, ,blvalue;a ? b : c,bc(, lvalue , );- ,
", !"; - lvalue,
static_cast<int&>(x)static_cast<void(&)(int)>(x);
|
( C++11) |
:
prvalue
prvalue:
- ( ),
42,truenullptr; - , ,
str.substr(1, 2),str1 + str2it++; a++a--, ;a + b,a % b,a & b,a << b;a && b,a || b,!a, ;a < b,a == b,a >= b;&a, ;a.m, ,m-[2],arvalue,m( C++11);p->m, ,m-[2];a.*mp, ,mp-[2],arvalue,mp( C++11);p->*mp, ,mp-[2];a, b, ,brvalue;a ? b : c,bc( );- ,
static_cast<double>(x),std::string{}(int)42; -
this; - ;
- , , ( C++20) lvalue;
|
( C++11) |
|
( C++20) |
:
- , rvalue ( ).
- prvalue : .
- prvalue, , cv-, , cv- ( C++17). (: prvalue cv- , cv- .)
- prvalue (
void, ,decltype) - prvalue .
xvalue
xvalue:
- , rvalue ,
std::move(x); a[n], , rvalue;a.m, ,arvalue,m;a.*mp, ,arvalue,mp;a ? b : c,bc( );
|
( C++11) |
| ( C++17) | |
|
( C++23) |
:
- , rvalue ( ).
- , glvalue ( ).
, rvalue, xvalue rvalue, , glvalue, xvalue , xvalue cv-.
glvalue
glvalue lvalue, xvalue.
:
rvalue
rvalue prvalue, xvalue.
:
|
( C++11) |
-
a.mf p->mf, mf -, a.*pmf p->*pmf, pmf -, prvalue, , - , , (p->*pmf)().
, void, void throw prvalue, . (, , ..) return , void. , throw ?:.
|
. |
( C++17) |
, (, a.m, a lvalue struct A { int m: 3; }) glvalue: , , lvalue . lvalue rvalue glvalue , : .
,, , lvalue, , |
( C++11) |
CPL
CPL , : CPL " ", " ". ( rvalue). ( lvalue). "" "" " " " ".
C
C , , : C " lvalue" ( , ), "lvalue" , , " "[4].
C++98
C++ 2011 C, "rvalue" , lvalue, lvalue , lvalue, rvalue. C, lvalue, lvalue C++.
C++11
C++11, , [5]:
C++11 :
- , lvalue;
- , xvalue;
- , prvalue (" rvalue");
- [6].
, , " glvalue" (glvalue " lvalue"). lvalue, xvalue glvalue.
, , " rvalue". prvalue, xvalue rvalue.
C++17
C++17, , prvalue , , . , , C++11, prvalue .
C++:
| CWG 616 | C++11 | rvalue prvalue |
xvalue |
| CWG 1059 | C++11 | prvalue cv- | |
| CWG 1213 | C++11 | rvalue lvalue | xvalue |
| David Mazires, 2021 - decltype C++ |