分配了一个临时数组,但没有一个临时的主值

时间:2018-08-20 06:47:16

标签: c++ c++11 xvalue

我很惊讶这个C++代码被编译了:

int main()
{
    (int[10]){}[0]=15;
    return 0;
}

等效程序集是

main:
        push    rbp
        mov     rbp, rsp
        mov     QWORD PTR [rbp-48], 0
        mov     QWORD PTR [rbp-40], 0
        mov     QWORD PTR [rbp-32], 0
        mov     QWORD PTR [rbp-24], 0
        mov     QWORD PTR [rbp-16], 0
        mov     DWORD PTR [rbp-48], 15
        mov     eax, 0
        pop     rbp
        ret

根据此代码,定义一个没有任何名称的数组,然后进行分配。

有趣的是,当没有数组时,代码不会编译:

int main()
{
    (int){}=15; /* <Compilation failed> */
    return 0;
}

1-为什么在C ++中,对于临时数组,第一个表达式(也许您称其为xvalue赋值)合法,而对于基本主类型,为什么第二个表达式不合法?为什么用这种方式设计语言?

2-这样的临时数组有什么用途?

0 个答案:

没有答案