【发布时间】:2026-02-08 10:35:01
【问题描述】:
This question 询问是否所有临时对象都是右值。
答案是否定的,因为如果我们考虑这个表达式:
const int &ri = 2 + 3;
然后,可以使用相同的临时(2 + 3),这里是一个右值
作为后续表达式中的左值:
const int *pi = &ri;
所以这个临时值不是(仅)一个右值。
则逻辑语句temporary ==> rvalue 为假。
但是,我们不能写
const int &ri = &(2 + 3); // illegal, 2 + 3 -> temporary -> rvalue
或
int *i = &4; // illegal, 4 is an rvalue (literal)
或
int foo();
int *i = &foo(); // illegal, foo() -> temporary -> rvalue
因此我的问题是,我们能否在某个表达式中生成一个右值,而无需
有一个临时的或文字的? rvalue ==> (temporary or literal) 是真的吗?
【问题讨论】: