簡體   English   中英

為什么一元后運算符在C ++和Java中的行為不同?

[英]Why do Unary Post Operators behave differently in C++ and Java?

我在C ++(Dec-c ++)中運行以下程序:

int k = 5;
k = k++;
cout<<"Value of K :"<<k<<endl;

int l = 5;
l = l++ + l++;
cout<<"Value of L :"<<l<<endl;

int m = 5;
m = m++ + m++ + m++;
cout<<"Value of M :"<<m<<endl;

並針對變量k,l和m獲得了5,12和18。但是當我在Java中運行時,使用的是同一程序

int k = 5;
k = k++;
System.out.println("Value of K :"+k);

int l = 5;
l = l++ + l++;
System.out.println("Value of L :"+l);

int m = 5;
m = m++ + m++ + m++;
System.out.println("Value of M :"+m);  

對於變量k,L和M,我得到了5,11和18。

解釋為什么一元郵政運營商的計算方式有所不同? 我知道運營商的優先級和優先級規則。 但是,這里的一切都失敗了。 但是根據規則,從c ++看來似乎是合理的。 困惑java如何計算?

眾所周知,C ++和Java是不同的。 請提出在Java中如何處理運算符優先級和運算符優先級。

Java的規則在這里非常簡單。 子表達式(每個對后綴運算符的調用)從左到右評估,每個子表達式在下一個之前都經過充分評估。

int k = 5;
k = k++;

這會將k增加到6,但返回其先前的值(5)並將其重新分配給k 所以k是5。

int l = 5;
l = l++ + l++;

第一l++遞增l至6,並評估其先前值(5)。 然后調用下一個l++ ,將l遞增至7,並求值為6。將5和6相加並分配給l ,得出11。

int m = 5;
m = m++ + m++ + m++;

使用與之前相同的過程,我們只需要再執行一次,因此,這相當於將5 + 6 + 7加上結果賦給m ,即為18。

盡管您聲稱自己了解C ++,但C ++並不是那么簡單。 實際上,這是未定義的行為, 對此問題的答案中有詳盡的解釋。 沒有規則,您可以看到任何結果。 不要這樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM