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

周围的混乱no的[重复]

梅庆
2023-03-14

看了很多视频,看了一本书,我不清楚什么时候什么时候不使用noexcept。

所有的书都说,只有当函数永远不会抛出时,才应该使用noexcept。

我觉得应该用别的。许多人说分配函数不应该是noexcept,但是如果我不想捕捉这些错误,并且调用< code>std::terminate是可以接受的,该怎么办呢?

简而言之,是否应该在永远不会抛出的函数或除您希望从中捕获异常的函数之外的所有函数上使用no的例外。

恕我直言,一些异常不需要被捕获(即内存溢出等)

共有1个答案

寿和通
2023-03-14

标记 noexcept 是从开发人员到编译器的保证,函数永远不会抛出。

所以你应该把它添加到你知道不应该抛出的函数中。如果这些函数出于某种晦涩和不可知的原因而抛出,编译器唯一能做的就是终止应用程序(因为你保证了不应该发生的事情)。注意:从一个标记为 noexcept 的函数中,您可能不应该调用另一个函数,除非它也标记为 noexcept (就像常量正确性一样,您需要具有 noexcept 正确性)

您应该在哪里使用它:

  swap()   methods/functions. 
           Swap is supposed to be exception safe.
           Lots of code works on this assumption.

  Move Constructor
  Move Assignment.
           The object you are moving from should already be
           fully formed so moving it is usually a processes of
           swapping things around.

           Also be marking them noexcept there are certain 
           optimizations in the standard library that can be used.

     Note: This is usually the case.
           If you can not guarantee that move/swap semantics are 
           exception safe then do not mark the functions as noexcept.

您不想对所有异常调用终止。大多数时候,我会允许异常解除堆栈调用析构函数并正确释放资源。

如果它没有被捕获,那么应用程序将终止。

但是,大多数复杂的应用程序应该能够抵御异常。Catch丢弃启动的任务日志异常并等待下一个命令。有时你仍然想退出,但仅仅因为我在图形应用程序中的涂抹操作失败并不意味着我希望应用程序不体面地退出。我希望污迹操作被放弃,资源重新分配,应用程序恢复正常操作(这样我就可以保存退出并重新启动)。

 类似资料:
  • 我在研究JS中变量作用域的概念时,在上面发现了这个例子: 此函数的输出为 现在我很困惑,为什么gets会在第二个日志中获得值3。即使在语句中使用声明时也是如此。在中声明的不是应该在中获得一个新实例吗?

  • 根据java.util.regex.Pattern文档,表示否定,也表示行首。我如何弄清楚在任何程序中用于什么? 这个程序从Java中思考(与上面的问题无关) 我理解的含义,但是其他四种模式是什么意思呢?我可以做些什么来获得输出中除了单词java(不区分大小写)以外的所有内容?

  • 如果您编译它,然后用运行它,它将打印:b ...所以它要取第一个数组,并自动包装它以适应二维数组??真奇怪。有人能解释一下这是怎么回事吗?我很确定我错过了什么。

  • 我刚刚发现,当试图在周围拆分字符串时,我会得到,但是如果我在或其他任何东西周围拆分(当然还会更改字符串),它就会工作得很好。 这个管用:

  • 问题内容: 在下面的示例中,如果1000都是int(我认为它们都是),为什么底部不能编译? 问题答案: 经营者 运算符将操作数组合成表达式。 比较在其他地方讨论。对于其他二进制运算符,除非操作涉及移位或未类型化的常量,否则操作数类型必须相同。对于仅涉及常量的操作,请参见关于常量表达式的部分。 除移位操作外,如果一个操作数是未类型化的常量,而另一个操作数不是,则该常量将转换为另一种操作数的类型。 例

  • 既然String是JAVA中的一个类,那么在不使用新运算符的情况下,test1如何成为String对象呢?另外,当使用新运算符时,内存会分配给新的String(“testing”),那么在test1的情况下,内存是如何分配的呢?另外,当字符串被临时存储时,如果两个字符串具有相同的值,引用的是什么,那么该字符串在字符串临时存储池中存储一次?