返回语句,该语句调用在返回void的函数中返回void的函数

时间:2019-09-17 20:26:11

标签: c++ return-value

使用函数返回值时,以下代码在g ++中编译并工作。有一个返回void的方法,该方法在return语句中调用另一个返回void的函数。我的问题是为什么g ++允许这种行为?

#include <iostream> 


void Foo()
{
    std::cout << "Foo" << std::endl;
}

void Boo()
{
    return ( Foo() );
}


int main()  
{
    Boo();

    return ( 0 );
}

2 个答案:

答案 0 :(得分:2)

根据CPP Reference,在调用return expression;时:

  

在返回类型为(可能是cv限定)void的函数中,表达式是可选的,而在构造函数和析构函数中则不允许使用

后来,他们指出:

  

在返回void的函数中,如果表达式类型为void,则可以使用带有expression的return语句。

return可以具有void函数的表达式,只要该表达式也为void,这就是您所做的。这在模板中很有用,因为模板在编​​写函数时可能不知道函数的返回类型。

答案 1 :(得分:1)

void是在某些情况下可以与其他类型互换使用的类型。如果BooFoo返回int,那么您的示例将很有意义;为什么更改类型应该是特殊的例外,否则可以纠正语义?

return (Foo())本质上是在说“什么也不返回”,实际上,这是Boo规定的返回类型。你会发现

void bar() {
    return void();
}

编译就可以了。