【发布时间】:2012-02-01 10:25:27
【问题描述】:
此 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 范围或内联构造函数以及迭代器构造函数中的正则表达式参数是一个引用的事实......
但是,正如我前段时间在stackoverflow中阅读的,我只记得我理解的东西,我想知道在C++中使用构造函数作为函数参数是否安全(当然不使用new )。
【问题讨论】:
-
您没有将
const sregex_iterator end初始化为任何内容是否正确? -
@Chowlett:是的,这是创建“结束标记”迭代器的(不直观的)方法。
标签: c++ visual-studio-2010 std tr1