Ответ 1
Программа плохо сформирована, потому что она создает класс, который не может инициализировать объект нестатического члена ссылочного типа.
Я считаю, что gcc не должен компилировать это, но я получил предупреждение "нестатическая ссылка" int & test:: k в классе без конструктора ".
test
является не-POD-структурой, так как он содержит ссылочный элемент. (9 [класс]/4)
new test
default - инициализирует динамически распределенный класс. (5.3.4 [expr.new]/15)
По умолчанию инициализировать объект типа test
означает вызов неявно объявленного и неявно определенного конструктора по умолчанию. (8.5 [dcl.init]/5)
Неявно определенный конструктор по умолчанию эквивалентен конструктору по умолчанию с пустым mem-initialized-list и пустым телом функции. (12.1 [class.ctor]/7)
Далее:
Неявно определенный конструктор по умолчанию выполняет набор инициализаций класс, который будет выполняться написанным пользователем конструктором по умолчанию для этого класса с пустым списком mem-initializer (12.6.2) и пустым телом функции. Если этот пользовательский конструктор по умолчанию будет плохо сформирован, программа будет плохо сформирована.
Если объект не является именем в списке mem-initializer и член не относится к типу класса [с дополнительными ограничениями], то объект не инициализируется.
В противном случае объект не инициализируется. Если объект имеет тип const-type или ссылочный тип, [или...] программа плохо сформирована. "(12.6.2 [class.base.init]/4)