Это не неопределенное поведение, вектор автоматически инициализирует все свои элементы. Вы можете выбрать другое значение по умолчанию, если хотите.
Конструктор:
vector( size_type, T t = T() )
и для типа int тип по умолчанию (возвращается int()
) равен 0.
В локальной функции это:
int x;
не гарантируется инициализация переменной равной 0.
int x = int();
сделает это.
int x();
к сожалению не делает ни того, ни другого, но объявляет функцию.