Этот C++ терпит неудачу в Visual Studio 2010:Можно безопасно использовать конструкторы в функциональных параметрах в C++?
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
, конечно).
Правильно ли, что вы не инициализируете 'const sregex_iterator end' ничем? – Chowlett
@Chowlett: Да, это (неинтуитивный) способ создания итератора «end marker». –