(Посредством частичной инициализации я имею в виду, что она определена как неинициализированная, и один из ее членов задан для некоторого допустимого значения, но не для всех из них. А по локальному я имею в виду определение с автоматической продолжительностью хранения. Этот вопрос говорит только об этом.)
Используя автоматическую неинициализированную переменную, которая может быть определена с регистром, поскольку поведение rvalue является undefined. Структуры могут быть определены с помощью спецификатора класса хранения хранилища.
6.3.2.1
- Если lvalue обозначает объект с автоматическим временем хранения, который мог бы быть объявлен с классом хранения регистров (никогда не был принят его адрес), и этот объект не инициализируется (не объявляется с инициализатором, и никакое присвоение ему не было выполняется до использования), поведение undefined.
Обратите внимание, что он конкретно говорит, что и никаких присвоений ему не было выполнено.
Кроме того, мы знаем, что структура не может быть значением ловушки:
6.2.6.1.
- Значение структуры или объекта объединения никогда не является ловушным представлением, хотя значение члена структуры или объекта объединения может быть представление ловушки
Таким образом, возвращение неинициализированной структуры явно undefined.
Заявление: определяется неинициализированная структура, которая имеет один из ее членов, назначенных с допустимым значением.
Пример для более простого понимания:
struct test
{
int a;
int b;
};
struct test Get( void )
{
struct test g;
g.a = 123;
return g;
}
{
struct test t = Get();
}
Мне просто пришлось сосредоточиться на возвращении, но я считаю, что это также должно относиться к простому заданию, без каких-либо различий.
Правильно ли мое утверждение?