c++ - 在使用 C++ 时返回非 void 的函数中没有返回语句
问题描述
我试图理解函数中return
语句的 C++(GCC 编译器)期望non-void
。
例如,运行这段代码可以正常工作:
int foo()
{
throw "blah";
}
而另一方面,如果我们尝试使用/调用某个函数来完成throw
,它会面临众所周知的错误/警告:
no return statement in function returning non-void
例如:
void throw_blah()
{
throw "blah";
}
int foo()
{
throw_blah();
}
我对此很好奇,因为这与我的另一个问题直接相关,就像这里一样,throw
工作正常,但使用macro
forthrow
面临同样的错误。
解决方案
编译器不会费心去检测这种情况,因为throw_blah
保证永远不会返回的函数很少见,而且除了在最简单的情况下,它没有办法可靠地这样做。如果您有一个throw_blah
定义为永不返回的函数,您可以使用该[[noreturn]]
属性告诉编译器它,它会抑制警告。
请注意,这throw_blah
是奇怪的一点,而不是foo
. 例如,如果您调用exit
而不是throw_blah
from foo
,则不会发出错误。那是因为exit
被标记为[[noreturn]]
.
推荐阅读
- angular - 未呈现子辅助路线
- python - python 3 Discord 我如何将用户 dm 响应发送到特定的服务器通道
- php - 从 TWA 向 WordPress 网站发送 android 应用设备令牌
- react-native - 有效载荷 {"name":"DrawerNavigationRoutes"} 的操作 'REPLACE' 未被任何导航器处理
- c - 为 Lua 5.X 编写一个 lua C 模块
- python - 使用动态变量迭代多个字典:
- sql - 将列添加到按语句分组后如何仅聚合或显示第一行
- python - Flask + Requests 错误“TypeError:'Request'对象不可迭代”
- python - 使用 conda 环境运行烧瓶应用程序面临困难
- android - Ionic 5 React 背景地理定位