3

从 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。

4

1 回答 1

5

你是对的,因为你引用的原因。S().arr[0]DR 1213的 xvalue ,因此您应该能够将右值引用绑定到它。

这是gcc 错误 79832。请注意,clang HEAD 编译得很好

于 2017-03-12T17:32:05.117 回答