[dcl.att.noback]提供以下示例:
[[ noreturn ]] void f() {
throw "error";
// OK
}
但我不明白[[noreturn]]
,因为函数的返回类型已经是void
.了..
那么,noreturn
属性应该怎么用?
发布于 2018-03-22 16:04:04
noreturn属性应该用于不返回给调用者的函数。这并不意味着无效函数(返回给调用者 - 它们只是不返回值),而是函数完成后控制流不会返回调用函数的函数(例如,退出应用程序的函数,永远循环或抛出异常,如你的例子)。
编译器可以使用它来进行一些优化并生成更好的警告。例如,如果具有noreturn属性,则编译器可能会在编写代码时警告是否存在死代码。同样,编译器将知道不会在调用之后警告丢失了返回语句。
发布于 2018-03-22 17:24:40
noreturn
不会告诉编译器该函数没有返回任何值。它告诉编译器控制流不会返回给调用者。这允许编译器进行各种优化 ,它不需要保存和恢复任何围绕该调用的易失状态,它可以使用死代码来消除任何可能跟随调用的代码。
https://stackoverflow.com/questions/-100003666
复制相似问题