专业的编程技术博客社区

网站首页 > 博客文章 正文

C++11中的表达式状态分析(c++表达式和表达式语句的区别)

baijin 2024-10-01 07:34:37 博客文章 10 ℃ 0 评论

在C++03中,一个表达式的只能是左值(lvalue)或纯右值(rvalue),而在C++11中一个表达式可以有5种不同的状态:

  • lvalue
  • rvalue
  • xvalue
  • glvalue
  • prvalue

lvalue

左值之所有称为左值,是由于它可以出现在赋值表达式的左侧,来指向一个函数或对象。例如,如果E是一个指针类型的表达式,*E则是一个指向一个对象或函数的lvalue表达式。另一个例子是一个函数的返回值类型可以是一个左值的引用。

xvalue

xvalue(即将过期的值)也指向一个对象,通常在它生命期结束的附近(例如,它的资源被move了)。xvalue是包含右值引用的表达式的结果,例如,调用一个返回值类型是右值引用的函数得到是xvalue。

 std::vector<int> data(100);
 auto newData = std::move(data);
 // data是一个xvalue.

glvalue

广义的左值(“generalized” lvalue) 是一个lvalue或xvalue。

rvalue

右值之所以称为右值,是因为它只能出现在赋值表达式的右侧,右值也是一个xvalue,临时对象或没有与对象关联的值。

prvalue

纯右值(“pure” rvalue)是非xvalue的右值,例如函数返回的非引用类型的临时对象,以及字面量如123等。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表