2017-11-18 154 views
2

我想知道cin究竟是什麼。我的意思是一個功能或類...什麼是cin的數據類型

我相信它不是一個函數,因爲我們使用cin的方式是非常不同的一個函數被調用。

這留下類或對象或其他選項。

究竟是什麼?

+1

互聯網是你的朋友...'cin'是'istream'類類型的對象。嘗試在您最喜愛的搜索引擎上使用'cin'類型! –

回答

3

cin對象istream

+0

*'istream',而不是'iostream' –

+0

不是'iostream'。這是'istream'的一個對象。 –

4

C++標準§27.4.1 [iostream.objects.overview]

#include <ios> 
#include <streambuf> 
#include <istream> 
#include <ostream> 

namespace std { 
    extern istream cin; 
    extern ostream cout; 
    extern ostream cerr; 
    extern ostream clog; 
    extern wistream wcin; 
    extern wostream wcout; 
    extern wostream wcerr; 
    extern wostream wclog; 
} 

P1頭聲明對象與 通過所提供的標準C流相關聯的對象的在 (27.9.2)中聲明的函數,並且包括使用所需的所有頭文件這些 對象。

您還可以看看gcc的implementation on github

namespace std _GLIBCXX_VISIBILITY(default) 
{ 
_GLIBCXX_BEGIN_NAMESPACE_VERSION 

    // Standard stream objects. 
    // NB: Iff <iostream> is included, these definitions become wonky. 
    typedef char fake_istream[sizeof(istream)] 
    __attribute__ ((aligned(__alignof__(istream)))); 
    typedef char fake_ostream[sizeof(ostream)] 
    __attribute__ ((aligned(__alignof__(ostream)))); 
    fake_istream cin; 
    fake_ostream cout; 
    fake_ostream cerr; 
    fake_ostream clog; 

#ifdef _GLIBCXX_USE_WCHAR_T 
    typedef char fake_wistream[sizeof(wistream)] 
    __attribute__ ((aligned(__alignof__(wistream)))); 
    typedef char fake_wostream[sizeof(wostream)] 
    __attribute__ ((aligned(__alignof__(wostream)))); 
    fake_wistream wcin; 
    fake_wostream wcout; 
    fake_wostream wcerr; 
    fake_wostream wclog; 
#endif 

_GLIBCXX_END_NAMESPACE_VERSION 
} // namespace