精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

C++輸入和輸出的真實(shí)面目

Android編程精選 ? 來(lái)源:編程學(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)錯(cuò)誤輸出和刷新緩沖區(qū)并換行,它們都在命名空間std中,那么它們真實(shí)面目是什么?我們先來(lái)看一段代碼:

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

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

#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是一個(gè)類(lèi)basic_stream《char》的一個(gè)實(shí)例,那么很容易我們就能想到《《很有可能是類(lèi)basic_stream《char》的一個(gè)成員函數(shù),繼續(xù)追蹤下去,看看《《到底是啥。在類(lèi)模板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í)了我們猜想,《《其實(shí)是成員函數(shù)operator《《并且返回值是basic_ostream&,到這里我們就可以看出std::cout 《《 “Hello World!”其實(shí)是basic_ostream實(shí)例變量cout調(diào)用成員函數(shù)operator《《輸出字符串“Hello World!”并返回basic_ostream&。

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

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í)是一個(gè)函數(shù)模板,調(diào)用該函數(shù)會(huì)將一個(gè)換行符“ ”放入緩沖區(qū),并刷新緩沖區(qū),最后返回basic_ostream&。到這里我們終于明白std::cout 《《 “Hello World!” 《《 std::endl;的含義了,basic_ostream實(shí)例變量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)錯(cuò)誤輸出,將信息輸出到標(biāo)準(zhǔn)錯(cuò)誤流。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到底是什么玩意,先來(lái)看下下面這段代碼:

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

代碼很簡(jiǎn)單,就是想通過(guò)標(biāo)準(zhǔn)輸入輸入名字,并保存在變量name中。有了上面的經(jīng)驗(yàn),我們很容易想到std::cin應(yīng)該是某個(gè)類(lèi)的實(shí)例變量,而》》則是類(lèi)的成員函數(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是類(lèi)basic_istream《char》的實(shí)例變量,且basic_istream是類(lèi)模板。下面我們看看》》在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í)是成員函數(shù)operator》》并返回basic_istream&,那么這段代碼std::cin》》name就很容易理解了,basic_istream《char》類(lèi)實(shí)例變量cin調(diào)用成員函數(shù)operator》》從標(biāo)準(zhǔn)輸入輸入數(shù)據(jù),并保存在變量name中。到這里std::cout、std::cin、std::cerr和std::endl的含義終于真相大白了!

責(zé)任編輯:haq

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

    關(guān)注

    3

    文章

    4308

    瀏覽量

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

    關(guān)注

    22

    文章

    2104

    瀏覽量

    73500

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊(cè).pdf》資料免費(fèi)下載
    發(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)化指南用戶手冊(cè)

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

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000優(yōu)化C/C++編譯器v8.3.x.pdf》資料免費(fèi)下載
    發(fā)表于 11-01 09:35 ?0次下載
    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

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

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

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

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
    發(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è)備(如控制臺(tái)、文件等)發(fā)送數(shù)據(jù)。 1. 基本概念 ostream 是一個(gè)抽象基類(lèi),它定義了向輸出流寫(xiě)入數(shù)據(jù)的基本接口。 ost
    的頭像 發(fā)表于 09-20 15:11 ?535次閱讀

    OpenVINO2024 C++推理使用技巧

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

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

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

    C++中實(shí)現(xiàn)類(lèi)似instanceof的方法

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

    鴻蒙OS開(kāi)發(fā)實(shí)例:【Native C++

    使用DevEco Studio創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用Native C++模板,實(shí)現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫(kù)的功能。使用C標(biāo)準(zhǔn)庫(kù)hypot接口計(jì)算兩個(gè)給定數(shù)平方和的平
    的頭像 發(fā)表于 04-14 11:43 ?2513次閱讀
    鴻蒙OS開(kāi)發(fā)實(shí)例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯(cuò)誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標(biāo)準(zhǔn)?和?C++ 的歷史?。在這篇博客中,我們將仔細(xì)研究以 C++ 中?for?循環(huán)為中心的特定規(guī)則。
    的頭像 發(fā)表于 03-28 13:53 ?739次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環(huán)中的錯(cuò)誤

    c語(yǔ)言,c++,java,python區(qū)別

    C語(yǔ)言、C++、Java和Python是四種常見(jiàn)的編程語(yǔ)言,各有優(yōu)點(diǎn)和特點(diǎn)。 C語(yǔ)言: C語(yǔ)言是一種面向過(guò)程的編程語(yǔ)言。它具有底層的特性,能夠?qū)τ?jì)算機(jī)硬件進(jìn)行直接操作。
    的頭像 發(fā)表于 02-05 14:11 ?2249次閱讀

    vb語(yǔ)言和c++語(yǔ)言的區(qū)別

    VB語(yǔ)言和C++語(yǔ)言是兩種不同的編程語(yǔ)言,雖然它們都屬于高級(jí)編程語(yǔ)言,但在設(shè)計(jì)和用途上有很多區(qū)別。下面將詳細(xì)比較VB語(yǔ)言和C++語(yǔ)言的區(qū)別。 設(shè)計(jì)目標(biāo): VB語(yǔ)言(Visual Basic)是由
    的頭像 發(fā)表于 02-01 10:20 ?2075次閱讀

    C++簡(jiǎn)史:C++是如何開(kāi)始的

    MISRA C++:2023,MISRA? C++ 標(biāo)準(zhǔn)的下一個(gè)版本,來(lái)了!為了幫助您做好準(zhǔn)備,我們介紹了 Perforce 首席技術(shù)支持工程師 Frank van den Beuken 博士撰寫(xiě)
    的頭像 發(fā)表于 01-11 09:00 ?540次閱讀
    <b class='flag-5'>C++</b>簡(jiǎn)史:<b class='flag-5'>C++</b>是如何開(kāi)始的

    C語(yǔ)言和C++中那些不同的地方

    C語(yǔ)言雖說(shuō)經(jīng)常和C++在一起被大家提起,但可千萬(wàn)不要以為它們是一個(gè)東西。現(xiàn)在我們常用的C語(yǔ)言是C89標(biāo)準(zhǔn),C++
    的頭像 發(fā)表于 12-07 14:29 ?915次閱讀
    <b class='flag-5'>C</b>語(yǔ)言和<b class='flag-5'>C++</b>中那些不同的地方

    開(kāi)箱即用!教你如何正確使用華為云CodeArts IDE for C/C++

    華為云CodeArts IDE 定位華為云開(kāi)發(fā)者桌面 ,是華為云面向開(kāi)發(fā)者提供的一款智能化桌面集成開(kāi)發(fā)環(huán)境。CodeArts IDE for C/C++集成了華為自研的C/C++語(yǔ)言服
    的頭像 發(fā)表于 11-29 17:40 ?760次閱讀
    開(kāi)箱即用!教你如何正確使用華為云CodeArts IDE for <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>!