类类型的prvalue与xvalue辨析:myclass()属于哪种值类别?
myclass()的值类别判定:是prvalue而非xvalue 结论
myclass()属于prvalue(纯右值),不属于xvalue(亡值)。
C++标准相关规则
以C++17及后续版本的标准定义为例:
- prvalue包含:调用返回对象类型的纯右值的函数(包括默认构造函数这类特殊成员函数)、非字符串字面量、无身份的临时对象表达式等;
- xvalue则是指代可被移动资源的对象表达式,比如返回右值引用的函数调用、经
std::move转换后的表达式,这类表达式指向有身份但即将消亡的对象。
结合示例代码的解释
在你提供的代码中,myclass()是直接调用默认构造函数生成的临时对象,它是一个无身份的临时值,完全符合prvalue的定义。即使它被用来初始化函数参数c1(C++17及以后可能会省略拷贝操作),其值类别的判定不受影响。
核心区分点
- prvalue是纯粹的临时值,不对应任何可被移动的已有对象;
- xvalue是即将消亡的有身份对象,允许转移其资源。
内容的提问来源于stack exchange,提问作者iopiux
相关产品推荐
相关产品推荐

