从阅读 c++11 草案的 N3242 修订版来看,标准库接口的某些组件(特别是线程和锁定)似乎依赖于异常处理。
由于我在禁用异常的情况下做了很多工作,我想知道如果不启用异常处理,哪些库组件/功能将(实际上或逻辑上)不可用?
从阅读 c++11 草案的 N3242 修订版来看,标准库接口的某些组件(特别是线程和锁定)似乎依赖于异常处理。
由于我在禁用异常的情况下做了很多工作,我想知道如果不启用异常处理,哪些库组件/功能将(实际上或逻辑上)不可用?
首先(提醒一下),禁用异常和 RTTI 是标准没有考虑的编译器特定扩展。
由于标准库通常与编译器相关联,因此您的标准库实现可能是专门为应对这一点而设计的(特别是为了应对返回空指针而不是 raise )。new
std::bad_alloc
因此,您的要求是毫无意义的。查看您自己的库的文档以获取完整列表。
话虽如此,该标准确实保证许多操作永远不会抛出。我不知道有任何吞下异常的操作,我想它们中的大多数实际上可以安全地按原样使用。
例如,所有算法都应该是安全的。
不过,再一次,我只能建议阅读您的实施文档。
这个问题已经一个多月了,没有答案。
我提供了一个可以被视为社区 wiki 的答案,请根据需要添加。
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 节。传递。使用本机实现实现的抽象。
注意:会有更多。