你能防止 std::regex 在无效表达式上抛出异常吗?
Can you prevent std::regex from throwing exception on invalid expressions?
std::regex regex("*", std::regex_constants::icase);
这将引发异常。如果我禁用了异常,它将终止应用程序,这意味着我无法捕获它并且像往常一样对它不做任何事情。
有没有办法防止无效正则表达式在构造时抛出异常?还是存在的某种std::regex::isvalid("*")
检查?
我在想也许我可以想出一个单独的正则表达式,在我尝试构造函数之前解析输入正则表达式字符串,但我更喜欢另一种选择。
你不能。没有标准的方法可以做到这一点。异常是标准库的固有部分,即使是不抛出自己的异常的接口(例如臭名昭著的基于error_code
的接口<filesystem>
(也可以为其他操作抛出异常。
最好的办法是使用设计为无异常的库,例如启用了no_except
标志的 Boost.Regex。然后,您可以使用成员函数状态在构造boost::basic_regex
后检查错误。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 函数如何通知用户它基于函数原型抛出异常?
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- VisualStudios 会抛出异常,而代码块不会 [C++]
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- ZMQ::send() 抛出异常并终止 QNX 进程.为什么以及如何从中恢复?
- new(std::nothrow) int[n] 抛出异常
- 为什么g_object_set抛出异常(vcruntime140.dll)?
- 你能防止 std::regex 在无效表达式上抛出异常吗?
- C++子线程抛出异常
- 我们应该在抛出异常之前取消分配内存吗
- 有没有一种方法可以让OpenCLC++绑定为所有错误抛出异常
- 为什么访问模板化变体作为返回值抛出异常
- 为什么Qt在信号和插槽中为lambda表达式抛出错误?
- 如何实现,错误分配中止而不是抛出异常
- std::p riority_queue::p op什么时候会抛出异常
- 在0x5914F3BE抛出异常(基于.dll)
- std::vector 默认构造函数可以抛出异常吗?
- 为什么这个正则表达式抛出异常
- 从 lambda 表达式中抛出异常,坏习惯