課程
/后端開發
/C++
/C++遠征之模板篇
為什么打印出來的是這樣呢?
2018-04-11
源自:C++遠征之模板篇 4-3
正在回答
我今天也遇到了這個問題
對于
int a=1;
cout<<a++<<a++; 輸出的是21
當你在同一個cout中再加入a++ ,++a ,a--這些的時候? 結果是很難預測的, 下面是百度的解釋
cout整個表達式中的子表達式的求值順序是沒有指定的,而各個表達式之間都在a上操作,并改變a的狀態(即:表達式的副作用)
所以你這個式子的行為是未定義的,應當去避免這種行為,而不應該去解釋這些未定義的東西。
qq_楓火連山岳_0
我也遇到了這兩種情況,第二種是因為中間的代碼:
cout?<<?(coor++).getX()?<<?","?; //第一句 cout?<<?(coor++).getY()?<<?endl;????????//第二句
里面第一句輸出加第一次之前X的值,也就是1,輸出后X變成了2,Y變成4;
第二句輸出第二次++之前Y的值,也就是4,輸出后X變成了3,Y變成5;
第二種情況是這樣的,那么第一種呢???我怎么也想不通中間怎么輸出的2,3
第一張圖我不知道為什么,上課說的第二張圖,X先進行運算,不加,所以是1,Y在之前已經有過coor++,所以后置加了一次,所以是4
第一張圖打印2,3那句話這么寫就行了
cout<<(coor1++).getX() << "," ;
cout<<(coor1++).getY() << endl;
分行寫
___TINGWEN 提問者
第一個輸出1,3樓主應該沒有問題。
后++定義的是先算后加(代碼程序中輸出的是old的coordinate類型,所以輸出的數大小不變),所以(coor++).getX()輸出的數還是1,但是執行了這個之后,再執行getX()和getY()輸出應該是2,4了,所以后面的(coor++).getY()輸出的是4,執行完這個語句過后,再執行getX()和getY()輸出應該是3,5。
B_L
舉報
本C++教程力求即學即會,所有知識以實踐方式講解到操作層面
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-11-02
我今天也遇到了這個問題
對于
int a=1;
cout<<a++<<a++; 輸出的是21
當你在同一個cout中再加入a++ ,++a ,a--這些的時候? 結果是很難預測的, 下面是百度的解釋
cout整個表達式中的子表達式的求值順序是沒有指定的,而各個表達式之間都在a上操作,并改變a的狀態(即:表達式的副作用)
所以你這個式子的行為是未定義的,應當去避免這種行為,而不應該去解釋這些未定義的東西。
2018-09-27
我也遇到了這兩種情況,第二種是因為中間的代碼:
里面第一句輸出加第一次之前X的值,也就是1,輸出后X變成了2,Y變成4;
第二句輸出第二次++之前Y的值,也就是4,輸出后X變成了3,Y變成5;
第二種情況是這樣的,那么第一種呢???我怎么也想不通中間怎么輸出的2,3
2018-07-19
第一張圖我不知道為什么,上課說的第二張圖,X先進行運算,不加,所以是1,Y在之前已經有過coor++,所以后置加了一次,所以是4
2018-06-29
第一張圖打印2,3那句話這么寫就行了
cout<<(coor1++).getX() << "," ;
cout<<(coor1++).getY() << endl;
分行寫
2018-04-13
第一個輸出1,3樓主應該沒有問題。
后++定義的是先算后加(代碼程序中輸出的是old的coordinate類型,所以輸出的數大小不變),所以(coor++).getX()輸出的數還是1,但是執行了這個之后,再執行getX()和getY()輸出應該是2,4了,所以后面的(coor++).getY()輸出的是4,執行完這個語句過后,再執行getX()和getY()輸出應該是3,5。