[[noreturn]] int func1()
{
exit(0);
}
[[noreturn]] void func2()
{
;
}
网上看了一下,没怎么看懂。
我自己写代码试了一下,若一个有返回值的函数前面加[[noreturn]],内部不返回任何值,但是加个exit,可以运行,报警告。
func2就不会报错也不会警告。
这其中的机制到底是怎么样的?[[noreturn]]的目的是什么?应该用在什么情景下?
[[noreturn]] int func1()
{
exit(0);
}
[[noreturn]] void func2()
{
;
}
网上看了一下,没怎么看懂。
我自己写代码试了一下,若一个有返回值的函数前面加[[noreturn]],内部不返回任何值,但是加个exit,可以运行,报警告。
func2就不会报错也不会警告。
这其中的机制到底是怎么样的?[[noreturn]]的目的是什么?应该用在什么情景下?
3 回答858 阅读✓ 已解决
1 回答2.3k 阅读
1 回答833 阅读✓ 已解决
2 回答1.1k 阅读
2 回答2.1k 阅读✓ 已解决
1 回答1.2k 阅读
1 回答716 阅读
这是
C++11
的attribute specifier sequence
( http://en.cppreference.com/w/... )关于
[[noreturn]]
,官方解释是该
specifier
用来指示函数永不返回
,有助于编译器进行
编译优化
(如尾递归等),也可以用于
抑制编译器给出不必要的警告
(如int f(); f();
,不加[[noreturn]]
的话,编译器会警告f()
的返回值被忽略)但是,若函数的确有返回值,而你却指定
[[noreturn]]
的话,这就是未定义行为了