簡體   English   中英

`std::cout` 和 `std::ostream` 之間有什么關系?

[英]What's the relation between `std::cout` and `std::ostream`?

我在某處看到了下面的代碼片段

#include <iostream>


int main()
{
    std::ostream& os = std::cout;

    os << "thanks a lot" << std::endl;
    return 0;
}

由於上述代碼片段運行良好,這表明std::cout派生自std::ostream 但我還找不到任何直接參考。

根據文件,它說[強調我的]:

全局對象 std::cout 和 std::wcout控制輸出到與標准 C 輸出流 stdout 相關聯的實現定義類型(派生自 std::streambuf)的流緩沖區

上面的引用說std::cout控制輸出到從std::streambuf派生的類型,而不是從std::streambuf派生的std::cout

而且我只在名為/usr/include/c++/7/iostream的文件中找到std::cout的聲明:

  extern ostream cout;      /// Linked to standard output

我找不到std::cout的實現。

ostream是一個類。 cout是該類的一個實例。

這與class Person {}; Person john; class Person {}; Person john; . Person是類, john是該類的一個實例。 C++ 標准庫恰好提前創建了這個特定類 ( ostream ) 的實例 ( cout ),配置為寫入標准輸出流。

std::ostream& os = std::cout; 定義了一個名為os的新變量,它的類型為ostream& ,它是對ostream的引用。 然后它使其成為對已定義變量cout的引用。

由於上述代碼片段運行良好,這表明 std::cout 是從 std::ostream 派生的。

不完全的。 該代碼有效,因為std::coutstd::ostream 無需繼承即可閱讀和理解該代碼示例。

上面的引用說std::cout控制輸出到從std::streambuf派生的類型,而不是從std::streambuf派生的std::cout

這句話是在談論您不需要關心的細節(除非您確實關心它們;)。 extern ostream cout; 因為這個問題是ostream cout; 這意味着coutostream類型的實例(並且extern只是表明它只是一個聲明,而(實例的)定義在其他地方,何時在 C++ 中使用 extern )。

為了幫助這篇文章的讀者,請參閱下面的代碼片段

#include<iostream>
#include<typeinfo>

int main()
{
    std::cout << typeid(std::cout).name() << std::endl;
    std::cout << typeid(std::ostream).name() << std::endl;

    return 0;
}

這是輸出:

So
So

輸出表明它們是同一類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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