![](/img/trans.png)
[英]Why does inheritance behave differently in Java and C++ with superclasses calling (or not) subclasses' methods?
[英]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.