我使用std::regex
,它是从这样的字符串文字创建的:
std::regex vowel_re("a|e|i|o|u");
将它设为static
以节省构建时间甚至节省static const
是个好主意吗?此正则表达式很可能会被重用。
答案 0 :(得分:2)
如果一个大范围变量的构造时间是一个问题,那么将其设置为static
或static const
是一种快速的解决方案。因此,该变量仅初始化一次,从而节省了构建时间。
但是,这不是免费的。编译器必须生成防止多线程访问的保护(因此,如果两个不同的线程同时调用该函数“第一次”,则该变量不会初始化两次)。
要变通解决此新问题,您可以在函数之前将变量定义为匿名命名空间中的全局变量。因此,它将在启动时进行初始化(在调用main之前)。如果在其他全局变量的初始化中使用该函数,则仍必须注意初始化顺序失败。
当然,最好的解决方案是使用在运行时根本不需要初始化的东西。不幸的是,std :: regex构造函数不是constexpr
。但是您可以将boost.spirit用作std :: regex的替代方法,它可以解决您的问题,并在编译时尽可能地发挥作用。
编辑:
对于这种非常特殊的情况,我怀疑您也可以只使用find_first_of("aeiou")
的{{1}}方法(如果在任意字符范围内进行搜索,也可以使用算法std::basic_string
)。保持简单!