關於cin能識別輸入的資料型別(過載操作符&型別轉換)
#include
using std::cin;
using std::cout;
int main()
{
int i;
cin>>i;
if(cin) //cin是如何知道你輸入的是否符合i的型別
cout< else
cout< return 0;
}
cin是istream物件,istream繼承自ios,ios繼承自ios_base。不要忘記C++的型別轉換,可以隱式的向上型別轉換,一個類的型別也可以轉換成需要的簡單型別(類中定義轉換簡單型別的函式),需要的時候編譯器會知道呼叫他,條件判斷無非是bool型別或者可以轉化成bool型別的型別。
basic_ios裡面定義了一個成員函式,可以轉化成void*指標,void*指標可以轉化成bool型別,if(cin)呼叫過程就是呼叫這個函式operator void *() const;
如果if(!cin)則是呼叫另外一個成員函式bool operator !() const;
如果你問cin為何能識別輸入型別,那是靠過載>>來識別的。
下面的是關於>>的過載成員函式:
istream& operator>> (bool& val );
istream& operator>> (short& val );
istream& operator>> (unsigned short& val );
istream& operator>> (int& val );
istream& operator>> (unsigned int& val );
istream& operator>> (long& val );
istream& operator>> (unsigned long& val );
istream& operator>> (float& val );
istream& operator>> (double& val );
istream& operator>> (long double& val );
istream& operator>> (void*& val );
istream& operator>> (streambuf* sb );
istream& operator>> (istream& ( *pf )(istream&));
istream& operator>> (ios& ( *pf )(ios&));
istream& operator>> (ios_base& ( *pf )(ios_base&));
下面的不是成員函式,而是全域性函式:
istream& operator>> (istream& is, char& ch );
istream& operator>> (istream& is, signed char& ch );
istream& operator>> (istream& is, unsigned char& ch );
istream& operator>> (istream& is, char* str );
istream& operator>> (istream& is, signed char* str );
istream& operator>> (istream& is, unsigned char* str );
using std::cin;
using std::cout;
int main()
{
int i;
cin>>i;
if(cin) //cin是如何知道你輸入的是否符合i的型別
cout< else
cout< return 0;
}
cin是istream物件,istream繼承自ios,ios繼承自ios_base。不要忘記C++的型別轉換,可以隱式的向上型別轉換,一個類的型別也可以轉換成需要的簡單型別(類中定義轉換簡單型別的函式),需要的時候編譯器會知道呼叫他,條件判斷無非是bool型別或者可以轉化成bool型別的型別。
basic_ios
如果if(!cin)則是呼叫另外一個成員函式bool operator !() const;
如果你問cin為何能識別輸入型別,那是靠過載>>來識別的。
下面的是關於>>的過載成員函式:
istream& operator>> (bool& val );
istream& operator>> (short& val );
istream& operator>> (unsigned short& val );
istream& operator>> (int& val );
istream& operator>> (unsigned int& val );
istream& operator>> (long& val );
istream& operator>> (unsigned long& val );
istream& operator>> (float& val );
istream& operator>> (double& val );
istream& operator>> (long double& val );
istream& operator>> (void*& val );
istream& operator>> (streambuf* sb );
istream& operator>> (istream& ( *pf )(istream&));
istream& operator>> (ios& ( *pf )(ios&));
istream& operator>> (ios_base& ( *pf )(ios_base&));
下面的不是成員函式,而是全域性函式:
istream& operator>> (istream& is, char& ch );
istream& operator>> (istream& is, signed char& ch );
istream& operator>> (istream& is, unsigned char& ch );
istream& operator>> (istream& is, char* str );
istream& operator>> (istream& is, signed char* str );
istream& operator>> (istream& is, unsigned char* str );
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10697500/viewspace-530082/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料型別,型別轉換資料型別
- Java註釋,識別符號,資料型別,型別轉換Java符號資料型別
- Java資料型別及型別轉換Java資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- 資料型別轉換資料型別
- Java入門系列-05-資料型別和型別轉換Java資料型別
- JS資料型別的轉換JS資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- JavaScript 資料型別轉換JavaScript資料型別
- javascript資料型別轉換JavaScript資料型別
- 【Java】資料型別轉換Java資料型別
- 資料型別及轉換資料型別
- JSON 資料型別(轉載)JSON資料型別
- JS裡的資料型別轉換JS資料型別
- JS 裡的資料型別轉換JS資料型別
- JS中資料型別轉換JS資料型別
- 2、java資料型別轉換Java資料型別
- JavaScript 基本資料型別轉換JavaScript資料型別
- go資料型別識別Go資料型別
- javascript強制型別轉換與操作符JavaScript型別
- 型別轉換型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- 關鍵字、資料型別、識別符號資料型別符號
- mysql bigint型別和datetime型別的轉換MySql型別
- js資料型別間的互相轉換JS資料型別
- 自學java筆記I 基本型別+轉義字元+資料型別的轉換Java筆記字元資料型別
- scala和java資料型別轉換Java資料型別
- JavaScript 隱式資料型別轉換JavaScript資料型別
- go語言資料型別轉換Go資料型別
- Python3 資料型別轉換Python資料型別
- Java資料型別自動轉換(++ ,+=)Java資料型別
- python 與 Mysql 資料型別轉換PythonMySQL 資料型別
- JavaScript資料型別轉換總結JavaScript資料型別
- JavaScript資料型別分析及其轉換JavaScript資料型別
- JS資料型別轉換規則JS資料型別
- 關於 PHP 的資料型別 (一)PHP資料型別
- 關於 PHP 的資料型別 (二)PHP資料型別
- 關於 PHP 的資料型別 (三)PHP資料型別
- interface{} 型別的轉換型別