noreturn的要点是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

[dcl.att.noback]提供以下示例:

[[ noreturn ]] void f() {
    throw "error";
    // OK
}

但我不明白[[noreturn]],因为函数的返回类型已经是void.了..

那么,noreturn属性应该怎么用?

提问于
用户回答回答于

noreturn属性应该用于不返回给调用者的函数。这并不意味着无效函数(返回给调用者 - 它们只是不返​​回值),而是函数完成后控制流不会返回调用函数的函数(例如,退出应用程序的函数,永远循环或抛出异常,如你的例子)。

编译器可以使用它来进行一些优化并生成更好的警告。例如,如果具有noreturn属性,则编译器可能会在编写代码时警告是否存在死代码。同样,编译器将知道不会在调用之后警告丢失了返回语句。

用户回答回答于

noreturn不会告诉编译器该函数没有返回任何值。它告诉编译器控制流不会返回给调用者。这允许编译器进行各种优化 ,它不需要保存和恢复任何围绕该调用的易失状态,它可以使用死代码来消除任何可能跟随调用的代码。

扫码关注云+社区