在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++輸入和輸出的真實面目

Android編程精選 ? 來源:編程學(xué)習(xí)總站 ? 作者:代碼的牛頓 ? 2021-09-29 15:22 ? 次閱讀

C++輸入和輸出

在C++里std::cin、std::cout、std::cerr和std::endl分別是標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤輸出和刷新緩沖區(qū)并換行,它們都在命名空間std中,那么它們真實面目是什么?我們先來看一段代碼:

#include 《iostream》 int main() { std::cout 《《 “Hello World!” 《《 std::endl; std::cerr 《《 “error” 《《 std::endl; return 0; }

這段代碼很簡單,就是輸出“Hello world!”和“error”,那么這段代碼的底層原理是?我們先來看一下std::cout在標(biāo)準(zhǔn)庫中的定義:

#ifndef _LIBCPP_HAS_NO_STDOUT extern _LIBCPP_FUNC_VIS ostream cout; extern _LIBCPP_FUNC_VIS wostream wcout; #endif 。。.。。. typedef basic_streambuf《char》 streambuf; typedef basic_istream《char》 istream; typedef basic_ostream《char》 ostream; typedef basic_iostream《char》 iostream;

。。.。。. template 《class _CharT, class _Traits》 class _LIBCPP_TEMPLATE_VIS basic_ostream : virtual public basic_ios《_CharT, _Traits》 { 。。.。。. };

從以上代碼我們可以看出std::cout是一個類basic_stream《char》的一個實例,那么很容易我們就能想到《《很有可能是類basic_stream《char》的一個成員函數(shù),繼續(xù)追蹤下去,看看《《到底是啥。在類模板basic_stream中我們找到成員函數(shù)聲明如下:

basic_ostream& operator《《(bool __n); basic_ostream& operator《《(short __n);

basic_ostream& operator《《(unsigned short __n); basic_ostream& operator《《(int __n);

basic_ostream& operator《《(unsigned int __n); basic_ostream& operator《《(long __n);

basic_ostream& operator《《(unsigned long __n); basic_ostream& operator《《(long long __n);

basic_ostream& operator《《(unsigned long long __n); basic_ostream& operator《《(float __f);

basic_ostream& operator《《(double __f); basic_ostream& operator《《(long double __f); basic_ostream& operator《《(const void* __p); basic_ostream& operator《《(basic_streambuf《char_type, traits_type》* __sb);

充分證實了我們猜想,《《其實是成員函數(shù)operator《《并且返回值是basic_ostream&,到這里我們就可以看出std::cout 《《 “Hello World!”其實是basic_ostream實例變量cout調(diào)用成員函數(shù)operator《《輸出字符串“Hello World!”并返回basic_ostream&。

那么std::endl是不是某個類的實例呢?我們看看std::endl在標(biāo)準(zhǔn)庫的定義:

template 《class _CharT, class _Traits》 inline _LIBCPP_INLINE_VISIBILITY basic_ostream《_CharT, _Traits》& endl(basic_ostream《_CharT, _Traits》& __os) { __os.put(__os.widen(‘ ’)); __os.flush(); return __os; }

從代碼里可以看出,std::endl其實是一個函數(shù)模板,調(diào)用該函數(shù)會將一個換行符“ ”放入緩沖區(qū),并刷新緩沖區(qū),最后返回basic_ostream&。到這里我們終于明白std::cout 《《 “Hello World!” 《《 std::endl;的含義了,basic_ostream實例變量cout調(diào)用成員函數(shù)operator《《輸出字符串“Hello World!”,返回basic_ostream&并繼續(xù)調(diào)用成員函數(shù)operator《《輸出換行符并刷新輸出緩沖區(qū)。

現(xiàn)在我們很容易想到std::cerr和std::cout應(yīng)該差不多,區(qū)別則是std::cerr是標(biāo)準(zhǔn)錯誤輸出,將信息輸出到標(biāo)準(zhǔn)錯誤流。std::cerr定義如下:

extern _LIBCPP_FUNC_VIS ostream cerr; extern _LIBCPP_FUNC_VIS wostream wcerr; extern _LIBCPP_FUNC_VIS ostream clog; extern _LIBCPP_FUNC_VIS wostream wclog;

最后我們看看std::cin到底是什么玩意,先來看下下面這段代碼:

#include 《iostream》 int main() { std::string name; std::cin 》》 name; return 0; }

代碼很簡單,就是想通過標(biāo)準(zhǔn)輸入輸入名字,并保存在變量name中。有了上面的經(jīng)驗,我們很容易想到std::cin應(yīng)該是某個類的實例變量,而》》則是類的成員函數(shù)。std::cin的定義如下:

#ifndef _LIBCPP_HAS_NO_STDIN extern _LIBCPP_FUNC_VIS istream cin; extern _LIBCPP_FUNC_VIS wistream wcin; #endif 。。.。。. typedef basic_streambuf《char》

streambuf; typedef basic_istream《char》 istream; typedef basic_ostream《char》 ostream; typedef basic_iostream《char》 iostream;

。。.。。. template 《class _CharT, class _Traits》 class _LIBCPP_TEMPLATE_VIS basic_istream : virtual public basic_ios《_CharT, _Traits》 { 。。.。。. };

從代碼中可以看出std::cin是類basic_istream《char》的實例變量,且basic_istream是類模板。下面我們看看》》在basic_istream中聲明:

basic_istream& operator》》(basic_streambuf《char_type, traits_type》* __sb);

basic_istream& operator》》(bool& __n); basic_istream& operator》》(short& __n);

basic_istream& operator》》(unsigned short& __n); basic_istream& operator》》(int& __n);

basic_istream& operator》》(unsigned int& __n); basic_istream& operator》》(long& __n);

basic_istream& operator》》(unsigned long& __n); basic_istream& operator》》(long long& __n);

basic_istream& operator》》(unsigned long long& __n); basic_istream& operator》》(float& __f);

basic_istream& operator》》(double& __f); basic_istream& operator》》(long double& __f);

basic_istream& operator》》(void*& __p);

不出我們所料》》確實是成員函數(shù)operator》》并返回basic_istream&,那么這段代碼std::cin》》name就很容易理解了,basic_istream《char》類實例變量cin調(diào)用成員函數(shù)operator》》從標(biāo)準(zhǔn)輸入輸入數(shù)據(jù),并保存在變量name中。到這里std::cout、std::cin、std::cerr和std::endl的含義終于真相大白了!

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63872
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2116

    瀏覽量

    74586

原文標(biāo)題:std::cin、std::cout、std::cerr和std::endl在C++里的真實面目

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:ThreadPoll

    1、程序簡介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫的線程池處理:ThreadPoll。本案例完成如下工作:創(chuàng)建1個線程池,設(shè)置該線程池內(nèi)部有1024個線程空間。啟動5個線程
    的頭像 發(fā)表于 02-10 18:09 ?215次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)類庫案例:ThreadPoll

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序中。Spire.XLS for C++ 提供了一個對象模型 Excel
    的頭像 發(fā)表于 01-14 09:40 ?460次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    EE-112:模擬C++中的類實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++中的類實現(xiàn).pdf》資料免費下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b>中的類實現(xiàn)

    同樣是函數(shù),在CC++中有什么區(qū)別

    同樣是函數(shù),在 CC++ 中有什么區(qū)別? 第一個返回值。 C語言的函數(shù)可以不寫返回值類型,編譯器會默認為返回 int。 但是 C++ 的函數(shù),除了構(gòu)造和析構(gòu)這兩個特殊的函數(shù),必須
    的頭像 發(fā)表于 11-29 10:25 ?718次閱讀

    C7000 C/C++優(yōu)化指南用戶手冊

    電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊.pdf》資料免費下載
    發(fā)表于 11-09 15:00 ?0次下載
    <b class='flag-5'>C</b>7000 <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>優(yōu)化指南用戶手冊

    MSP430優(yōu)化C/C++編譯器v21.6.0.LTS

    電子發(fā)燒友網(wǎng)站提供《MSP430優(yōu)化C/C++編譯器v21.6.0.LTS.pdf》資料免費下載
    發(fā)表于 11-08 14:57 ?0次下載
    MSP430優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器v21.6.0.LTS

    TMS320C6000優(yōu)化C/C++編譯器v8.3.x

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000優(yōu)化C/C++編譯器v8.3.x.pdf》資料免費下載
    發(fā)表于 11-01 09:35 ?1次下載
    TMS320<b class='flag-5'>C</b>6000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器v8.3.x

    TMS320C28x優(yōu)化C/C++編譯器v22.6.0.LTS

    電子發(fā)燒友網(wǎng)站提供《TMS320C28x優(yōu)化C/C++編譯器v22.6.0.LTS.pdf》資料免費下載
    發(fā)表于 10-31 10:10 ?0次下載
    TMS320<b class='flag-5'>C</b>28x優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器v22.6.0.LTS

    C語言和C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?582次閱讀

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    ostream在c++中的用法

    )是 C++ 標(biāo)準(zhǔn)輸出流體系的核心部分,用于向各種輸出設(shè)備(如控制臺、文件等)發(fā)送數(shù)據(jù)。 1. 基本概念 ostream 是一個抽象基類,它定義了向輸出流寫入數(shù)據(jù)的基本接口。 ost
    的頭像 發(fā)表于 09-20 15:11 ?1501次閱讀

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開發(fā)的使用習(xí)慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
    的頭像 發(fā)表于 07-26 09:20 ?1361次閱讀

    C++語言基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《C++語言基礎(chǔ)知識.pdf》資料免費下載
    發(fā)表于 07-19 10:58 ?8次下載

    C++中實現(xiàn)類似instanceof的方法

    C++有多態(tài)與繼承,但是很多人開始學(xué)習(xí)C++,有時候會面臨一個常見問題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時候,這個時候就希望C++ 可以向Java或者Python中有instanceof這個
    的頭像 發(fā)表于 07-18 10:16 ?803次閱讀
    <b class='flag-5'>C++</b>中實現(xiàn)類似instanceof的方法

    如何用CubeMX產(chǎn)生C++專案?

    今天寫了一個類別,準(zhǔn)備實驗的時候發(fā)現(xiàn)Cube沒辦法選擇輸出Cpp專案阿 我IDE是用ST出的Eclipse直接Import進來的,我也試過Convert to C++但沒有用阿。
    發(fā)表于 05-10 06:57
    主站蜘蛛池模板: 操碰视频在线 | 亚洲乱亚洲乱妇41p 亚洲乱亚洲乱妇41p国产成人 | 欧美ww| 久久狠狠第一麻豆婷婷天天 | 国产美女一区二区三区 | 日日噜夜夜噜 | 特黄特a级特别特级特毛片 特黄特色大片免费播放路01 | 在线免费看视频 | 国产一级特黄aa大片在线 | 一色屋免费视频 | 男人呻吟双腿大开男男h互攻 | 男女交性视频播放视频视频 | 亚洲一区二区三区高清视频 | 午夜在线视频网站 | 色拍拍视频 | 女人张开双腿让男人桶完整 | 97黄网| 亚洲一区二区三区四区在线观看 | 欧美成人午夜精品一区二区 | 伊人网在线视频 | 韩国理论片在线看2828dy | xxxx性欧美高清 | 精品亚洲成a人片在线观看 精品亚洲大全 | xxx性欧美| 日本不卡专区 | 九九热国产 | 欧美福利一区 | 色播丁香 | 欧美午夜激情影院 | 色视频免费观看 | 美女h片| 2o18国产大陆天天弄 | 欧美一级看片免费观看视频在线 | 美女被艹视频网站 | 日本黄色网页 | 99久久精品费精品国产 | 天天做天天做天天综合网 | 国产在线播放成人免费 | 亚洲一区日本 | 欧美精品成人a多人在线观看 | 丁香花五月天婷婷 |