C++值的类型说明
C++表达式(操作符表达式,字面量,变量名等)都有值类型,通常将值的类型划分为左值和右值:
C++11后出现了5种值的类型,简单解释:
glvalue
广义左值,(运算结果)是具有身份/内存地址的对象/函数的表达式,包括xvalue
和lvalue
xvalue
即将过期值/亡值,属于glvalue
广义左值,表示其资源可以被重复使用/移动的对象
lvalue
历史上叫法(可以出现在赋值运算符的左边),属于glvalue但不是xvalue
prvalue
纯右值,例如字面量(字符串除外)、算术表达式(a+b, &a, 后置加加等)、临时对象、lamda表达式等。rvalue
历史叫法(可以出现在赋值运算符的右边),包括prvalue
和xvalue
可以将值大概分为3种:
xvalue
广义左值,但是其资源可以重复使用/移动【有身份,可以移动】lvalue
传统左值,资源不能移动【有身份,不可以移动】prvalue
传统右值,资源可以移动【没有身份,可以移动】在C++中右值rvalue的语义就是可移动的。
只需要记住特殊的广义左值xvalue
,它是有身份的但是其资源可以移动,常见情形:
// 1. 返回右值引用的函数调用
std::move(x);
func(); //func的声明:Foo&& func();
// 2. 转换为右值引用的cast
static_cast<int&&>(x);
// 3. rvalue的成员
std::move(x).m_data; // 非引用类型的非静态成员
func().m_data; //func的声明:Foo&& func();
static_cast<Foo&&>(x).m_data;
本文链接: C++值的类型
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
发布日期: 2022-04-10
最新构建: 2024-12-26
欢迎任何与文章内容相关并保持尊重的评论😊 !