为什么用cout运算符调用void函数会给我错误?

时间:2018-12-18 06:38:53

标签: c++

当我调用void函数时,我可以获得返回的值,但是,当我使用cout运算符调用void函数时,它给了我错误。 当我使用cout运算符调用int类型函数时,它仍然会给我返回的值。

执行该行时有2个错误 1.错误:“操作符<<”不匹配 2.错误:形成对void的引用

由于我不懂C ++,所以我不确定为什么会这样。错误是什么意思?

#include <iostream>
using namespace std;

void doSomething()
{
    cout <<"doSomething";
}

int doSomething2()
{
    cout << "doSomething2";
}

int main()
{

    doSomething(); // doSomething
    cout<< "\n";
    doSomething2(); // doSomething2
    cout<< "\n";

    cout << "doSomething : " << " " << doSomething() << endl; // Error : 
    // Forming reference to void
    cout << "doSomething2 : " << "  " << doSomething2() << endl; // 
    // doSomething2
    return 0;
}

2 个答案:

答案 0 :(得分:1)

void函数本质上不会返回值。因为cout需要一个值,所以存在编译错误(如“与'操作符<<'不匹配”所示)

为了更好地解释第二个错误(“错误:形成对void的引用”); “返回的”空白不是内存中的有效位置。什么也没有返回,因此,任何东西都不能传递给cout。

问题的根源(如问题下方的注释中突出显示)在于函数的“效果”与函数的“返回值”之间的混淆。使用“输出”一词含糊其词可能会引起很大的困惑。

答案 1 :(得分:1)

std::cout是实例的类没有<<的重载运算符,可以将返回void的函数绑定到该运算符。 (它可能有,但没有,没有人说服C ++标准委员会这样做是必要的。)

所以编译失败。

函数doSomething2的行为是未定义,因为您没有给它明确的返回值。