[英]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.