从阅读c ++ 11草案的修订版N3242开始,标准库接口的某些组件(特别是线程和锁定)似乎依赖于异常处理。
由于我使用异常禁用做了很多工作,我想知道哪些库组件/功能(实际上或逻辑上)不可用而没有启用异常处理?
答案 0 :(得分:4)
首先(仅作为提醒),禁用异常和RTTI是标准没有考虑的编译器特定扩展。
由于标准库通常与编译器绑定,因此可能 标准库的您的实现已经专门设计用于处理此问题(特别是,以应对new
返回空指针而不是提升std::bad_alloc
)。
因此,你要求的是非感性的。查看您自己库的文档以获取完整列表。
话虽这么说,标准确实保证许多操作永远不会抛出。我不知道任何吞下异常的操作,我认为大多数操作实际上都是安全的。
例如,所有算法都应该是安全的。
不过,我再次建议您阅读 实施的文档。
答案 1 :(得分:1)
这个问题已经超过一个月了,没有答案。
我提供的答案可以被视为社区维基,并根据需要添加。
std::thread
第30.2.2节。传递。使用本机实现实现抽象。
std::mutex
,std::recursive_mutex
,std::timed_mutex
,std::recursive_timed_mutex
。 第30.4.1节,如果您提供自己的异常免费锁定(通过BasicLockable
,Lockable
,TimedLockable
),则不会传递。使用本机实现实现抽象。
std::condition_variable
第30.5节。传递。使用本机实现实现抽象。
注意:会有更多。