从 5.2.1.1 开始:
该表达式与 [...]
E1[E2]
相同(根据定义),*((E1)+(E2))
除了在数组操作数的情况下,如果该操作数是左值,则结果为左值,否则为 xvalue。
但是,使用以下代码:
struct S
{
int arr[5];
};
int main()
{
int &&r = S().arr[0];
}
GCC 和 Clang 都抱怨“右值引用不能绑定到左值 int”。
我误解了什么?据我了解S()
是右值,S().arr
是xvalue,S().arr[0]
xvalue也应该是xvalue,并且应该能够绑定到rvalue refs。