日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cout的输出顺序

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cout的输出顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
int c = 5;

?cout<<(c = 2)<<" "<<(c = 3)<<" "<<(c = 1)<<endl;


cout是從右到左依次求解,再輸出的

2 2 2


? int a = 1;
? ?cout<<a++<<" "<<a<<endl;
? ??
? ?int b = 1;
? ?cout<<++b<<" "<<b<<endl;


output:

1 2

2 2


如果是

cout << sizeof(a++) << a << endl

output:

4 1



?sizeof更像一個特殊的宏,它是在編譯階段求值的。舉個例子:

cout<<sizeof(int)<<endl; // 32位機上int長度為4
cout<<sizeof(1==2)<<endl; // == 操作符返回bool類型,相當于 cout<<sizeof(bool)<<endl;

在編譯階段已經被翻譯為:?

cout<<4<<endl;
cout<<1<<endl;

這里有個陷阱,看下面的程序:?

int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;

輸出為什么是4,0而不是期望中的4,3???就在于sizeof在編譯階段處理的特性。由于sizeof不能被編譯成機器碼,所以sizeof作用范 圍內,也就是()里面的內容也不能被編譯,而是被替換成類型(也就是說括號內的表達式不會運算)。=操作符返回左操作數的類型,所以a=3相當于int,而代碼也被替換為:?

int a = 0;
cout<<4<<endl;
cout<<a<<endl;

所以,sizeof是不可能支持鏈式表達式的,這也是和一元操作符不一樣的地方。?

結論:不要把sizeof當成函數,也不要看作一元操作符,把他當成一個特殊的編譯預處理。?

int f1() {printf("f1()\n");return 1; }int f2() {printf("f2()\n");return 2; }int f3() {printf("f3()\n");return 3; }int main(void) { int i = 0;int j = 0;//printf("%d %d\n",i,i++);//0 0//cout<<j<<" "<<j++<<endl;//0 0//printf("%d %d\n",j++,j);//0 0//cout<<i++<<" "<<i<<endl;//0 1//printf("%d %d\n",i,++i);//1 1//cout<<j<<" "<<++j<<endl;//1 1//printf("%d %d\n",++j,j);//1 1//cout<<++i<<" "<<i<<endl;//1 1/*printf("%d,%d,%d\n",f1(),f2(),f3());cout<<f1()<<f2()<<f3()<<endl;*///printf("%d \n", i++);//0printf("%d %d\n",++i, i++);//1 0cout<<++j<<" "<<j++<<endl;//1 0return 0; }

一般來講是,從右向左,依次壓入棧中,然后再依次彈出

但是對于i,++i,之類的,的確沒有什么規律。。。



總結

以上是生活随笔為你收集整理的cout的输出顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。