当我调用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;
}
答案 0 :(得分:1)
void函数本质上不会返回值。因为cout需要一个值,所以存在编译错误(如“与'操作符<<'不匹配”所示)
为了更好地解释第二个错误(“错误:形成对void的引用”); “返回的”空白不是内存中的有效位置。什么也没有返回,因此,任何东西都不能传递给cout。
问题的根源(如问题下方的注释中突出显示)在于函数的“效果”与函数的“返回值”之间的混淆。使用“输出”一词含糊其词可能会引起很大的困惑。
答案 1 :(得分:1)
std::cout
是实例的类没有<<
的重载运算符,可以将返回void
的函数绑定到该运算符。 (它可能有,但没有,没有人说服C ++标准委员会这样做是必要的。)
所以编译失败。
函数doSomething2
的行为是未定义,因为您没有给它明确的返回值。