Почему это простое присваивание ведет себя как неопределенное?

Я обновлял свое понимание инициализации значения по сравнению с инициализацией по умолчанию и наткнулся на это :

struct C {
    int x;
    int y;
    C () { }
};

int main () {
    C c = C ();
}

По-видимому, это UB, потому что

В случае C () , есть конструктор, способный инициализация членов x и y, поэтому инициализация не выполняется. Поэтому попытка скопировать C () в c приводит к неопределенному поведению.

Думаю, я понимаю почему, но не уверен. Может кто-нибудь уточнить?

Означает ли это, что это тоже UB?

int x; x = x;

Кстати, что касается инициализации значения, гарантированно ли следующее будет нулевым?

int x = int ();

12
задан spraff 6 February 2012 в 16:33
поделиться