Tho*_*ell 7 c++ regex optimization c++11
我正在使用std::regex,在阅读中定义的各种常量时std::regex_constants,我遇到了std::optimize,阅读它,听起来它在我的应用程序中很有用(我只需要一个正则表达式的实例,在开头初始化,但它是在整个装载过程中多次使用).
据该工作文件n3126(第1077), std::regex_constants::optimize:
指定正则表达式引擎应该更加关注正则表达式匹配的速度,并且更少关注正则表达式对象的构造速度.否则它对程序输出没有可检测的影响.
我很好奇将会执行什么类型的优化,但似乎没有太多关于它的文献(事实上,它似乎是未定义的),我发现的唯一的事情之一是在cppreference.com,声明std::regex_constants::optimize:
指示正则表达式引擎更快地进行匹配,以及使构造变慢的潜在成本.例如,这可能意味着将非确定性FSA转换为确定性FSA.
但是,我没有计算机科学的正式背景,虽然我知道FSA是什么的基础知识,并且理解确定性FSA(每个州只有一个可能的下一个状态)和非确定性FSA(具有多个潜在的下一个状态); 我不明白这是如何改善匹配时间的.另外,我很想知道在各种C++标准库实现中是否还有其他优化.
Jeffrey Friedl 的《掌握正则表达式》中有一些关于正则表达式引擎和性能权衡主题的有用信息(远远超出了 stackoverflow 答案的范围)。
值得注意的是,N3126 的来源 Boost.Regex 记录optimize为“这目前对 Boost.Regex 没有影响”。
聚苯乙烯
事实上,它似乎是实现定义的
不,这是未指定的。实现定义意味着需要一个实现来定义行为的选择。实现不需要记录它们的正则表达式引擎是如何实现的或者标志有什么(如果有)差异optimize。
PS 2
在各种 STL 实现中
std::regex不是STL的一部分,C++标准库与STL不是一回事。
| 归档时间: | 
 | 
| 查看次数: | 2204 次 | 
| 最近记录: |