Поскольку sizeof(size_t)
больше или равно sizeof(int)
(хотя это может зависеть от реализации) и size_t
равно unsigned
, int
(1
) преобразуется в size_t
.
Следовательно, в выражении o.size() - 1
1
неявно преобразуется в size_t
, и o.size() - 1
(что эквивалентно size_t(0 - 1)
) становится равным std::numeric_limits<size_t>::max()
. Следовательно, for
l oop вводится, и доступ к вашему пустому o
по индексу 0
приводит к неопределенному поведению.
Вы должны:
for (size_t idx = 0; idx < o.size(); ++idx) { /* ... */ }
Если для некоторых Если вам нужен индекс типа int
, вы можете:
for (int idx = 0; idx < static_cast<int>(o.size()); ++idx) { /* ... */ }
или в вашем примере (который встречается реже):
for (int idx = 0; idx <= static_cast<int>(o.size()) - 1; ++idx) { /* ... */ }