当前位置: 首页 > 知识库问答 >
问题:

C++11中的弃投列表

孙博艺
2023-03-14

正如我在cppreference中看到的,经典的“throw”声明列表现在在C++11中被废弃了。离开这个机制的原因是什么?我应该如何指定哪些异常抛出我的函数?

共有1个答案

楚皓君
2023-03-14

有关更详细的推理,请参见:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3051.html

正如上述国家机构评论中所表示的那样,例外规范在实践中没有被证明是有用的。关于C++中异常规范的问题有许多讨论(参见,例如[Sutter02]、[Boost03]),但主要问题是:

  • 运行时检查:C++异常规范在运行时检查,而不是在编译时检查,因此程序员不能保证所有异常都已处理。运行时故障模式(调用std::unversional())不适合恢复。
  • 运行时开销:运行时检查要求编译器生成附加代码,这也会妨碍优化。
  • 在泛型代码中不可用:在泛型代码中,通常不可能知道对模板参数的操作可能引发哪些类型的异常,因此无法编写精确的异常规范。
 类似资料:
  • 警告本身如下所示: [信息]将1个Scala源代码编译为/xxx/.../xxx/.sbt/staging/xxx/target/scala-2.9.2/sbt-0.12/classes... [警告]出现1个弃用警告;重新运行-deprecation以了解详细信息 [warn]发现一个警告 [info]将1个Scala源代码编译为/xxx/.../xxx/project/target/scala

  • 我一直在阅读Unicode的主题 - 特别是,UTF-8 - C 11中的(非)支持,我希望Stack Overflow上的大师可以向我保证我的理解是正确的,或者指出我在哪里误解或遗漏了一些东西,如果是这样的话。 首先,好处是:您可以在源代码中定义UTF-8、UTF-16和UCS-4文本。此外,

  • 更新至英文版January 3, 2012。 译者前言: 经过C++标准委员会的不懈努力,最新的ISO C++标准C++11,也即是原来的C++0x,已经正式发布了。让我们欢迎C++11! 今天获得Stroustrup 先生的许可,开始翻译由他撰写和维护的C++11 FAQ 。我 觉得这是一件伟大而光荣的事情,但是我又觉得压力很大,因为我的英语水平很差劲,同时自己的C++水平也很有限,很害怕在翻译

  • 不过,我也有一些错误: 我的代码出了什么问题?

  • 有关问题: 关于C 11: C 11: std::线程池? C 11中的异步(启动::a同步)会使线程池过时,以避免昂贵的线程创建吗? 关于升压: C提升线程重用线程 提升::线程并创建一个线程池! 我如何获得发送任务的线程池,而不必一次又一次地创建和删除它们?这意味着持久性线程可以在不加入的情况下重新同步。 我有如下代码: 与每次迭代都创建和加入线程不同,我更愿意在每次迭代中将任务发送给我的工作

  • 下面这些指令是废弃的,但是仍然可以运行: call:使用 自定义指令调用 来代替。 comment:这是 <#--...--> 的老格式。 在 <#comment> 和 </#comment> 之间的任何东西都会被忽略。 foreach: 它是 list 指令的代名词,有着略微不同的参数语法。它的语法结构是 <#foreach item in sequence>,和 <#list sequence