【发布时间】:2016-07-27 21:03:26
【问题描述】:
我以前从未见过[[ noreturn ]] 用于非空返回函数。
以下定义是否明确?
[[ noreturn ]] int function();
int function(){
while(true){/* impl */}
return 0;
}
返回类型必须是int的原因是因为函数是通过函数指针传递给另一个函数的。
所以假设调用者看起来像这样:
//call the non-returning function
int var = (*fptr)();
//use var some way (even though the function will never actually return)
std::cout << var;
这会表现出任何未定义的行为吗?
【问题讨论】:
-
你可能会遇到迂腐的麻烦,允许实现假设无限循环结束。 (link)
-
@chris 我也希望用 [[maybe_unused]] 标记返回值。
-
来自您发布的链接:如果具有此属性的函数实际返回,则行为未定义。
标签: c++ c++11 return undefined-behavior noreturn