gpt4 book ai didi

c++ - 使 std::regex 静态化是个好主意吗?

转载 作者:行者123 更新时间:2023-11-30 02:19:01 24 4
gpt4 key购买 nike

我使用从字符串文字创建的 std::regex,如下所示:

std::regex vowel_re("a|e|i|o|u");

将其设置为 static 以节省构造时间甚至 static const 是个好主意吗?此正则表达式很可能会被重复使用。

最佳答案

如果 block 作用域变量的构造时间是个问题,将它设为staticstatic const 是一种快速且不脏的解决方案。因此变量只被初始化一次,节省了构建时间。

但是,这不是免费的。编译器必须针对多线程访问生成保护(因此,如果函数被两个不同线程同时“首次”调用,则变量不会被初始化两次)。

要解决这个新问题,您可以在函数之前的匿名命名空间中将变量定义为全局变量。因此它在启动时被初始化(在调用 main 之前)。如果您在其他全局变量的初始化中某处使用该函数,您仍然需要注意初始化顺序失败

当然,最好的解决方案是使用在运行时根本不需要初始化的东西。不幸的是,std::regex 构造函数不是 constexpr。但是您可以使用 boost.spirit 作为 std::regex 的替代品,它可以解决您的问题并在编译时尽可能多地做。

编辑:

对于这种非常特殊的情况,我怀疑您也可以只使用 std::basic_stringfind_first_of("aeiou") 方法(或算法 std::find_first_of 如果您正在搜索任意字符范围)。保持简单!

关于c++ - 使 std::regex 静态化是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com