Я поражен, что это 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-Какое применение такого временного массива?
Задача ещё не решена.
Других решений пока нет …