淺析C++中cout的運(yùn)行機(jī)制
#include <iostream>
using namespace std;
int hello1();
int hello2();
int main()
{
int a, b;
cout<<"a="<<hello1()<<" b="<<hello2()<<endl;
return 0;}
int hello1()
{
cout<<"hello1"<<endl;
return 1;
}
int hello2()
{
cout<<"hello2"<<endl;
return 2;
}
最終輸出是:
hello2
hello1
a=1 b=2
一時(shí)讓人有點(diǎn)難以琢磨,網(wǎng)上給出了其靠譜的解釋:cout流的操作順序是:先從右往左讀入緩沖區(qū),然后再從左往右輸出。所以它從右邊往左讀的時(shí)候,碰到了函數(shù)當(dāng)然去執(zhí)行函數(shù)先了,然后把函數(shù)返回值讀入緩沖區(qū)再然后。。。就是從左輸出了。
根據(jù)這個(gè)解釋,有實(shí)驗(yàn)的幾個(gè)程序,能加深點(diǎn)理解
程序1:
#include <iostream>
using namespace std;
int main()
{
int b[2]={1,2};
int *a=b;
cout<<*a<<" "<<*(a++)<<endl;
return 0;
}
輸為出:2 1。
解釋:先讀入*(a++),對(duì)于a++,是先讀入緩沖區(qū),其自增,所以,此時(shí)緩沖區(qū)中的a是1,。再讀入*a,此時(shí)a已自增,所以讀入緩沖區(qū)的是2.
程序2:
#include <iostream>
using namespace std;
int main()
{
int i=5;
cout<<i<<" "<<(i++)<<" "<<(++i)<<endl;
return 0;
}
輸出為:7 6 6
解釋:從右往左,先是(++i),即先自增,再讀入緩沖區(qū),為6。再是(i++),即先讀入緩沖區(qū),為6,再自增。最后是i,讀入緩沖區(qū)為7.
相關(guān)文章
利用C語言實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用純C語言實(shí)現(xiàn)任務(wù)調(diào)度(可用于STM32、C51等單片機(jī)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04Qt實(shí)現(xiàn)進(jìn)程界面之間的鼠標(biāo)焦點(diǎn)切換
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)進(jìn)程界面之間的鼠標(biāo)焦點(diǎn)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09關(guān)于Visual Studio無法打開源文件"stdio.h"問題
這篇文章主要介紹了關(guān)于Visual Studio無法打開源文件"stdio.h"問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解
今天小編就為大家分享一篇關(guān)于C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2021-09-09C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表
大家好,今天給大家?guī)淼氖琼樞虮恚矣X得順序表還是有比較難理解的地方的,于是我就把這一塊的內(nèi)容全部整理到了一起,希望能夠給剛剛進(jìn)行學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人帶來一些幫助,或者是已經(jīng)學(xué)過這塊的朋友們帶來更深的理解,我們現(xiàn)在就開始吧2022-05-05C語言靜態(tài)動(dòng)態(tài)兩版本通訊錄實(shí)戰(zhàn)源碼
這篇文章主要為大家?guī)砹薈語言實(shí)現(xiàn)靜態(tài)動(dòng)態(tài)兩版本的通訊錄實(shí)戰(zhàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02