Этот код C ++ завершается сбоем в Visual Studio 2010:
const sregex_iterator end;
for (sregex_iterator match(origString.begin(), origString.end(), regex(regExPattern)); match != end; ++match)
{
useMatch(*match);
}
После первого цикла в первом шаге итератора (operator++
) происходит сбой отладчика, указывающий на то, что regex_iterator «потерял».
Я заметил сомнительный конструктор регулярных выражений (я скопировал фрагмент откуда-то), и я попытался с этим:
const sregex_iterator end;
regex regexObj(regExPattern);
for (sregex_iterator match(origString.begin(), origString.end(), regexObj); match != end; ++match)
{
useMatch(*match);
}
Это сработало отлично.
Но почему первая попытканеудачу?Я полагаю, что это должно быть с областью действия for
или, может быть, с встроенным конструктором и тем фактом, что параметр regex в конструкторе итератора является ссылкой ...
Но, как я читал в stackoverflow, некоторое времяназад я помню только то, что понимаю, и хотел бы знать, безопасно ли использовать конструкторы в качестве параметров функции в C ++ (конечно, без использования new
).