在 cout 语句中使用 cout 调用函数
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() 之间唯一不同的是,一个是 return 类型,一个不是。如您所见,我添加了注释,指出哪一个有效,哪个无效。
但是,我真的不确定幕后发生了什么,这使得一个成为可能,另一个成为不可能。
我什至不确定我应该如何去寻找这种问题..所以我在这里问一个问题。
请赐教..
编辑:
我很困惑如何在 cout 之后进行 cout ..
两个函数都这样做,但其中一个有效,另一个无效。
get_something()
returns 东西(cout
似乎接受了什么),所以 cout
会收到 returned 的东西并且会起作用.
另一方面,print_something()
return 什么都没有(因为它的 return 类型是 void
),所以 cout
无法接收任何打印并且不会工作。
因为 print_something()
与 return 没有任何关系,并且 cout
想要向控制台写入一些内容(它期望的 return 值)。所以会报错。
另一方面,get_something()
有一些东西要 return。因此,在执行它的其余部分(return 语句除外)后,它 return 由 cout
打印的字符串
这似乎是初学者非常普遍的误解。通过 cout
打印某些内容与 return 从函数中打印值不同。那是完全正交的事情。
你可以这样写:
std::string returned_value = get_something();
std::cout << returned_value;
但是你不能写:
??? returned_value = print_something();
std::cout << returned_value;
因为 print_something()
没有 return 任何东西! void
表示没有类型。您不能拥有 void
.
类型的对象
另一方面,当你调用一个函数时,你可以使用 returned 值(上面),或者你可以忽略它,所以这是正确的代码:
print_something(); // prints something
get_something(); // also print something and returned value is ignored
请注意函数 get_something
应该取一个更好的名字,因为它不仅仅是“获取”一个值。 print_and_return_something()
怎么样?
PS:
What I am really confused about is that, how is it possible to do a cout after a cout? Am I just missing what cout actually does?
不确定我是否理解,但我会尝试... std::cout
是类型 std::ostream
的对象。它有一个可以调用的operator<<
,类似于调用其他对象的方法。以下两个是相同的,只是使用不同的语法:
std::cout.operator<<( "Hello World");
std::cout << "Hello World";
当您调用 print_something()
时,首先执行函数,然后 return 值被 return 发送给调用者,调用者继续执行。这个:
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
与调用其他函数没有什么不同。假设你有一个函数 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<<
。
两个 你的函数都有 return 类型。只不过其中一个是void
return类型
std::ostream
class 没有 <<
的重载,它采用 void
类型。这是明智的 - 在这种情况下将写入流中的内容是什么?
(cout
是 std::ostream
的一个实例,它通常将自己写入 标准输出 通常是 shell 你用于启动程序。)
cout
是一个流 object.and 我们使用 <<
(插入运算符)向其中插入值,如 String、float、Int 等,这些值将显示在输出中 Screen.Since print_something()
没有返回任何值,所以没有在流中插入任何内容,这就是它不起作用的原因。
我建议您阅读有关 C++ 中的 Streams 的内容..
首先请看一下我的问题的一些简单代码。
#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() 之间唯一不同的是,一个是 return 类型,一个不是。如您所见,我添加了注释,指出哪一个有效,哪个无效。
但是,我真的不确定幕后发生了什么,这使得一个成为可能,另一个成为不可能。 我什至不确定我应该如何去寻找这种问题..所以我在这里问一个问题。
请赐教..
编辑: 我很困惑如何在 cout 之后进行 cout .. 两个函数都这样做,但其中一个有效,另一个无效。
get_something()
returns 东西(cout
似乎接受了什么),所以 cout
会收到 returned 的东西并且会起作用.
另一方面,print_something()
return 什么都没有(因为它的 return 类型是 void
),所以 cout
无法接收任何打印并且不会工作。
因为 print_something()
与 return 没有任何关系,并且 cout
想要向控制台写入一些内容(它期望的 return 值)。所以会报错。
get_something()
有一些东西要 return。因此,在执行它的其余部分(return 语句除外)后,它 return 由 cout
这似乎是初学者非常普遍的误解。通过 cout
打印某些内容与 return 从函数中打印值不同。那是完全正交的事情。
你可以这样写:
std::string returned_value = get_something();
std::cout << returned_value;
但是你不能写:
??? returned_value = print_something();
std::cout << returned_value;
因为 print_something()
没有 return 任何东西! void
表示没有类型。您不能拥有 void
.
另一方面,当你调用一个函数时,你可以使用 returned 值(上面),或者你可以忽略它,所以这是正确的代码:
print_something(); // prints something
get_something(); // also print something and returned value is ignored
请注意函数 get_something
应该取一个更好的名字,因为它不仅仅是“获取”一个值。 print_and_return_something()
怎么样?
PS:
What I am really confused about is that, how is it possible to do a cout after a cout? Am I just missing what cout actually does?
不确定我是否理解,但我会尝试... std::cout
是类型 std::ostream
的对象。它有一个可以调用的operator<<
,类似于调用其他对象的方法。以下两个是相同的,只是使用不同的语法:
std::cout.operator<<( "Hello World");
std::cout << "Hello World";
当您调用 print_something()
时,首先执行函数,然后 return 值被 return 发送给调用者,调用者继续执行。这个:
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
与调用其他函数没有什么不同。假设你有一个函数 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<<
。
两个 你的函数都有 return 类型。只不过其中一个是void
return类型
std::ostream
class 没有 <<
的重载,它采用 void
类型。这是明智的 - 在这种情况下将写入流中的内容是什么?
(cout
是 std::ostream
的一个实例,它通常将自己写入 标准输出 通常是 shell 你用于启动程序。)
cout
是一个流 object.and 我们使用 <<
(插入运算符)向其中插入值,如 String、float、Int 等,这些值将显示在输出中 Screen.Since print_something()
没有返回任何值,所以没有在流中插入任何内容,这就是它不起作用的原因。
我建议您阅读有关 C++ 中的 Streams 的内容..