Ben hala açıkça anlayamadık C++ 11 x ^= y ^= x ^= y;
geçerli ifade edip (bu thread dedikleri gibi) veya istenmeyen davranışlara yol açar? bağlantı tarafından verilenTamsayıları XOR aracılığıyla tek satırda değiştirin. C++ 11'e gerçekten izin var mı?
nedenleri inandırıcı görünebilir ancak çınlama bir warning atar: 'x' [-Wunsequenced]
Üstelik eğer her iki sürümü için unsequenced modifikasyon ve erişime:
uyarı :
x ^= y ^= x ^= y; // (1) x = x^(y = y^(x = (x^y))); // (2)
olarak eşdeğer (C++ 11 iyi tanımlanmış), neden(farklı sonuçlar vermektedir, second)?
Ayrıca, gcc sadece kod ikinci versiyonunda dizisi noktası etrafında bir warning verir unutulmamalıdır.
Hayır, iyi tanımlanmış değildir. Analiz 'i = ++ i 1 '+ + o [bu soru] (http://stackoverflow.com/questions/24194076/in-c11-does-ii-1-exhibit-undefined- çok benzer davranışı). –
Bu sürümler hiç bir şekilde eşit değildir. – UmNyobe
Ben senin akıl sağlığı için öneride bulunabilir http://stackoverflow.com/questions/29313902/sequence-point-within-assignment-operators – Lingxi