7

从阅读 c++11 草案的 N3242 修订版来看,标准库接口的某些组件(特别是线程和锁定)似乎依赖于异常处理。

由于我在禁用异常的情况下做了很多工作,我想知道如果不启用异常处理,哪些库组件/功能将(实际上或逻辑上)不可用?

4

2 回答 2

4

首先(提醒一下),禁用异常和 RTTI 是标准没有考虑的编译器特定扩展。

由于标准库通常与编译器相关联,因此您的标准库实现可能是专门为应对这一点而设计的(特别是为了应对返回空指针而不是 raise )。newstd::bad_alloc

因此,您的要求是毫无意义的。查看您自己的库的文档以获取完整列表。

话虽如此,该标准确实保证许多操作永远不会抛出。我不知道有任何吞下异常的操作,我想它们中的大多数实际上可以安全地按原样使用。

例如,所有算法都应该是安全的。

不过,再一次,我只能建议阅读您的实施文档。

于 2011-09-13T12:42:04.993 回答
1

这个问题已经一个多月了,没有答案。

我提供了一个可以被视为社区 wiki 的答案,请根据需要添加。

  • std::thread 第 30.2.2 节。传递。使用本机实现实现的抽象。

  • std::mutex, std::recursive_mutex, std::timed_mutex, std::recursive_timed_mutex. 第 30.4.1 节,如果您提供自己的无异常锁定(通过BasicLockableLockableTimedLockable),则不传递。使用本机实现实现的抽象。

  • std::condition_variable 第 30.5 节。传递。使用本机实现实现的抽象。

注意:会有更多。

于 2011-10-14T20:23:12.237 回答