第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對下面代碼的輸出如何解釋?不太明白

對下面代碼的輸出如何解釋?不太明白

C++
MYYA 2023-04-18 11:15:04
#include <iostream>using namespace std;int main(){ int i=0; cout<<i++<<" "<<i++<<endl;//輸出1 0 i=0; cout<<++i<<" "<<++i<<endl;//輸出2 2}
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

請不要再糾結(jié)這種和編譯器細節(jié)有關(guān)的東西了,因為第一你不需要了解,第二如果你需要了解那只能是你在寫這個編譯器,第三你了解的再多也可能和平臺、CPU等有關(guān)系——他們隨時可以變化。一句話,這不是推薦的代碼風(fēng)格,請避免這種寫法。

我在我的Mac上用i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)測試,結(jié)果和你說的一樣。

可能出現(xiàn)這種情況的理由是:

cout<<i++<<" "<<i++<<endl;//輸出1 0

等價于

operator<<( operator<<( operator<<(cout, i++), " "), i++);


查看完整回答
反對 回復(fù) 2023-04-21
?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

我記得曾經(jīng)有過這樣一個問題,C語言中:

#include <stdio.h>int main(){    int a, b;
    a = 2;
    b = (++a) * (++a) * (++a);    printf("%d\n", b);    return 0;
}

gcc輸出結(jié)果是80,但是TC的結(jié)果是60。據(jù)我們幾個人推測原因是,gcc編譯器是這樣處理的:

    a = ++a;                //a == 3 
    a = ++a;                //a == 4
    b = a * a               //b == 4 * 4==16
    a = ++a;                //a == 5
    b = b * a;              //b == 16 * 5 == 80

而TC編譯器是這樣處理的:

    a = ++a;                //a == 3
    b = 3 * (++a);
    a = ++a;                //a == 4
    b = 3 * 4;
    a = ++a;                //a == 5
    b = b * a;              //b == 12 * 5 == 60

個人理解呢,C語言也好C++也好只是一種標準,每個編譯器在不違反標準的前提下有自己實現(xiàn)的辦法,所以在寫代碼的時候注意不要寫這種模棱兩可的東西,不然移植性太差,以及容易出各種問題。事實上也沒必要深究,除非是研究需要之類的。


查看完整回答
反對 回復(fù) 2023-04-21
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號