Ответ 1
Правильно, первый использовал бы box a = { { 1 } }
, так что у вас есть один набор фигурных скобок для каждого агрегата. Внешний набор фигурных скобок для структуры, а внутренний набор для массива. Однако, язык позволяет вам опустить внутренние фигурные скобки.
В последнем нет внутренних брекетов, чтобы опустить. Вы не можете опустить внешние фигурные скобки; у вас должен быть хотя бы один набор фигурных скобок, чтобы отличить список инициализаторов для совокупности. В некотором смысле фигурные скобки говорят: "Вот список вещей, которые нужно внести в совокупность". Когда вы пишете box b = 2
, компилятор не знает, что вы хотите разместить 2
внутри совокупность. Вместо этого, похоже, вы пытаетесь инициализировать объект b
(а не его часть) на 2
. Поэтому компилятор пытается найти конструктор или преобразование, которое изменяет 2
на box
. Когда это не удается, вы получите сообщение об ошибке.