Временный массив назначен, но не временное первичное значение

Я поражен, что это 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. Почему первое выражение (возможно, вы называете его присваиванием xvalue) допустимо в C ++ для временного массива, но не второе для базового основного типа? Почему язык разработан таким образом?

2-Какое применение такого временного массива?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]