簡體   English   中英

在 cout 語句中使用 cout 調用 function

[英]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 寫入什么?

coutstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM