该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);
}
这完美地工作。
但是,为什么第一次尝试失败?我suposse它必须与for
作用域或可能与内联的构造函数,并在迭代器构造函数中的正则表达式参数是一个参考的事实...
但是,正如我在前面读到的stackoverflow,我记得只有我理解的东西,我想知道在C++中使用构造函数作为函数参数是否安全(当然,不使用new
)。
您是不是正在将'const sregex_iterator end'初始化为任何东西? – Chowlett 2012-02-01 10:34:28
@Chowlett:是的,这是创建“结束标记”迭代器的(不直观的)方法。 – 2012-02-01 11:35:45