[英]call function with cout inside a cout statement
首先,请看一下我的问题源自的一些简单代码。
#include <iostream>
#include <string>
using namespace std;
string get_something()
{
cout << "output something";
return " and return something";
}
void print_something()
{
cout << "print something";
}
int main()
{
cout << get_something(); // will work
cout << print_something(); // will NOT work
return 0;
}
我在 get_something() 和 print_something() 之间注意到的唯一不同之处在于,一个是返回类型,一个不是。 如您所见,我添加了注释,指出哪个可以工作,哪个不工作。
但是,我真的不确定幕后发生的事情是什么使之成为可能,而另一种则不可能。 我什至不确定我应该如何 go 并搜索这类问题。所以我在这里问一个问题。
请赐教。。
编辑:我很困惑如何在 cout 之后执行 cout .. 这两个功能都可以做到,但其中一个有效,另一个无效。
这似乎是初学者中非常普遍的误解。 通过cout
打印内容与从 function 返回值不同。 那是完全正交的事情。
你可以写:
std::string returned_value = get_something();
std::cout << returned_value;
但是你不能写:
??? returned_value = print_something();
std::cout << returned_value;
因为print_something()
不返回任何东西! void
表示没有类型。 您不能拥有void
类型的 object 。
另一方面,当您调用 function 时,您可以使用返回值(如上),也可以忽略它,因此这是正确的代码:
print_something(); // prints something
get_something(); // also print something and returned value is ignored
请注意,function get_something
应该有一个更好的名称,因为它不仅仅是“获取”一个值。 print_and_return_something()
怎么样?
PS:
我真正感到困惑的是,怎么可能在一个 cout 之后做一个 cout? 我只是错过了 cout 的实际作用吗?
不确定如果我理解,但我会尝试... std::cout
是一个类型为std::ostream
的 object 。 它有一个可以调用的operator<<
,类似于调用其他对象的方法。 以下两个是相同的,只是使用不同的语法:
std::cout.operator<<( "Hello World");
std::cout << "Hello World";
当您调用print_something()
时,首先执行 function,然后将返回值返回给调用者,并由调用者继续执行。 这个:
std::cout << get_something();
或多或少与(好吧,这是一个粗略的简化,但在这里应该没问题):
// inside get_something
std::cout << "output something";
// return value
std::string result{"output something"};
// now execution continues in caller
std::cout << result;
在cout
之后调用cout
与调用其他一些 function 没有什么不同。 假设你有一个 function print()
打印一些东西然后你可以写
std::string print_and_return() {
std::string x{"Hello World"};
print(x);
return x;
}
调用者可以做
std::string x = print_and_return(); // <- this already calls print()
print(x); // now we call it again
这或多或少与您的相同,只是我使用了一些假设的print()
而不是std::cout::operator<<
。
您的两个函数都有返回类型。 只是其中一个具有void
返回类型。
std::ostream
class 没有采用void
类型的<<
重载。 这是明智的 - 在这种情况下,将向 stream 写入什么?
( cout
是std::ostream
的一个实例,它通常将自身写入标准 output ,这通常是您用来启动程序的 shell 。)
因为print_something()
没有要返回的内容,并且cout
想要将某些内容写入控制台(它期望的返回值)。 因此,它会给出错误。
另一方面, get_something()
有一些东西要返回。 所以在执行它的 rest 行之后(除了 return 语句)它返回字符串,由 cout 打印
get_something()
返回一些东西(似乎被cout
接受的东西),所以cout
将接收返回的东西并且会工作。
另一方面, print_something()
什么也不返回(因为它的返回类型是void
),所以cout
不能接收任何要打印的东西并且不会工作。
cout
is a stream object.and we use <<
(insertion operator) to insert value like String,float,Int etc to it which will be displayed in output Screen.Since print_something()
is not returning any value so nothing is inserted in stream ,这就是为什么它不起作用。
我建议您阅读 c++ 中的 Streams..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.