[英]Why no warning in java.util.Collections.swap(List<?>, int, int)?
[英]Java inline int swap. Why does this only work in Java
我被要求在不使用臨時變量或使用xor的情況下編寫交換,我想出了這個。
在Java中,這可行,但在C / C ++中,這不起作用。
我的印象是,由於'|'左側'a'的值,這總是有效的 將被存儲在寄存器中,然后分配給'a'將否定對'b'的指定值的影響。
int a = 5;
int b = -13;
b = a | (0 & (a = b));
您正在修改變量並讀取其值而沒有插入序列點。
b = a + 0 * (a = b);
// reading a's value modifying a
這是未定義的行為。 您無權對代碼的作用有任何期望。
C / C ++編譯器將表達式0 * (a = b)
為0
,將代碼片段轉換為:
int a = 5;
int b = -13;
b = a;
在C / C ++中,按表達順序執行分配。 在Java中,無論其他表達式如何,分配都會在最后發生。
例如,這在C中遞增但在Java中沒有任何作用。
a = a++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.