Ни один из std::vector<>
методов никогда не использует внутреннюю форму инициализации по умолчанию.std::vector<>
требует, чтобы его элементы были CopyConstructible и Assignable , но не требует, чтобы они были DefaultConstructible .Каждый раз, когда вы сталкиваетесь с ситуацией, когда некоторые элементы кажутся построенными «из ничего» (как в случае ваших вызовов resize
), это обычно означает, что используемый вами метод std::vector<>
имеет дополнительный параметр, который позволяетвам передать значение, из которого будут созданы новые элементы.Мы не часто замечаем это, поскольку эти аргументы всегда снабжаются значениями по умолчанию, равными ()
-инициализированному элементу соответствующего типа.
В вашем случае,
_matrix.at(i).resize(rhs.getCol());
фактически переводится в
_matrix.at(i).resize(rhs.getCol(), double());
, что означает, что формально именно вы 1020 * неявно передаете начальное значение для новых элементов.
double()
оценивается какноль, так что да, векторы столбцов будут изначально заполнены нулями.