C/C++:调用没有参数的函数,函数不返回任何内容

Geo*_*rge 14 c c++

为什么不能调用一个不带参数的函数调用函数调用作为不返回任何值的参数(IMHO相当于调用一个不带参数的参数的函数).

例如:

void foo(void) {...}
void bar(void) {...}

foo(bar())
Run Code Online (Sandbox Code Playgroud)

不要误解我的意思,我知道void这不是一个价值,它不能像对待一样.

凭借我的逻辑,这将是有道理的,应该可以做到这一点.我的意思是,为什么不呢?任何争论为什么不可能?

Chr*_*ung 8

我不相信我听过的任何理由都是好的.

请参阅在C++中,您可以返回void函数的结果:

void foo() {
    // ...
}

void bar() {
    // ...
    return foo();
}
Run Code Online (Sandbox Code Playgroud)

是的,它完全相同:

foo();
return;
Run Code Online (Sandbox Code Playgroud)

但是与通用编程更加一致,因此您可以使转发功能工作,而不必担心转发的函数是否已void返回.

因此,如果应用类似的系统使得void返回在函数组合场景中构成一个无效调用,那么这可能使函数组合更通用.

  • 实际上它会,但是`return`是6.6.3/4的特殊情况:"表达式为"cv void"的返回语句只能用于返回类型为cv void的函数;表达式将被计算就在函数返回其调用者之前." (2认同)
  • 你可能已经在那里回答了你自己的问题 - 为什么`return`的特殊情况是它总是需要0个操作数或1.它很容易允许两者之间的一些通用性.函数调用可以使用任意数量的参数.为了支持泛型,你需要多个值返回,这样我们就可以做`void foo(int,int); X吧(无效); foo(bar());`对于某些X.除非你能支持"任何可能的数字",否则在特殊套管0中没有多少价值. (2认同)