1

我很惊讶这段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-这种临时数组的应用是什么?

4

0 回答 0