You need to enable JavaScript to run this app. C++中void函数内return调用另一void函数是否符合C++11规范?
优惠活动
大模型
产品
解决方案
定价
更多

C++中void函数内return调用另一void函数是否符合C++11规范?

核心结论

return bar(); 这种写法在C++11及之后的所有正式标准中都是完全合法的语法,和C语言的规则存在本质差异。

和C语言规则的核心区别

C语言严格要求,返回值类型为void的函数中,return语句内不允许出现任何表达式,哪怕表达式本身是void类型也不行。你给出的示例代码如果放到标准C环境下,编译器会直接抛出语法错误。
但C从C11标准开始,就明确放宽了这条限制,专门允许void返回类型的函数中,在return后面直接接另一个void类型函数的调用表达式。

C++11的标准依据

根据C++11标准对return语句的定义:

对于返回值类型为void的函数,return语句不要求携带返回值表达式;但如果携带了表达式,该表达式的类型必须严格为void。
也就是说,只要return后面跟的表达式本身是void类型(比如一个返回void的函数调用),整个语句就完全符合语法要求,编译器不会报任何错误。

写法的实际等价性

你偏好的return bar();写法,和“先单独执行bar();、再写裸return;”的书写风格在运行行为上完全等价:

  • 程序会先执行bar()的全部逻辑,完成输出等预设操作
  • bar()执行完成返回后,当前foo函数立刻进入返回流程,不会执行函数内后续的多余代码
  • 不会产生任何额外的运行时开销,也不会改变程序的原有逻辑

规则的延续性

这条从C11确立的语法规则,直到最新的C23正式标准、以及正在制定的后续标准草案中,都没有被修改或移除,始终是合法的常用语法。

注意事项

  • 这种写法仅当return后面跟的表达式是void类型时才合法。如果在返回void的函数里写return 123;或者return someIntFunc();这类携带非void类型表达式的语句,依然会触发语法错误。
  • 从代码可读性的角度,这种写法非常适合需要提前终止函数、同时调用收尾/清理逻辑的场景,逻辑直白,不会增加额外的阅读负担。

内容的提问来源于stack exchange,提问作者jeffbRTC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 08:06:01