2012-08-30 17 views
6

Bu hat C++ standardı kapsamında değildir iddia eden bir kişi vardı: kişi o 1 atar ama biz array_of_int[1] olmak veya görsel stüdyo ve her ne array_of_int[2] edip bilemez söylediDizi [i] = i ++ C++ standardı kapsamında mı?

int i(1); 
array_of_int[i] = i++; 

en Derleyiciler array_of_int[1] içinde olacaktır.

Doğru mu?

+0

Anladığım kadarıyla, bu davranış derleyici tarafından belirlenir ve C++ standardında açıkça belirtilmemiş olan – CatShoes

+4

Olası dup: http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors -iiiii-etc - bu cevaplardan birinde ele alınmıştır. – Mat

+0

Sorularımı bir dupe olup olmadığını lütfen kapatın ya da kaldırın, arandığını bulmayı denedim ama aramamı doğru anahtar kelimelerle formüle etmedim. – BlueTrin

cevap

6

Bu tanımlanmamış bir davranış. Tam anlamıyla herhangi bir davranış yasaldır. bir amacı, depolanan değeri bir ifadenin değerlendirilmesi ile en fazla bir kere tadil edilmiş olması olan önceki ve sonraki dizi nokta arasında

:

kod bu hat yasaklar geçit budur. Bundan başka, önceki değeri

a[i] ve i++ ve a[i] içinde i için okuma arasında dizi noktası değeri depolanır ne belirlemek amacıyla yok olduğu kaydedilecek değeri belirlemek için yalnızca okunacaktır i++ tarafından i.

+0

Açıklama için teşekkür ederiz, dizi noktalarının wiki sayfasına bir link ekledim – BlueTrin

+1

dizi noktaları C++'den kaldırıldı ve dizilimle değiştirildi ifadeler/alt ifadeler arasındaki ilişkiler. [buraya bakın] (http://stackoverflow.com/a/10655884/365496). Bu, tanımlanmamış davranışların bazı örneklerini iyi tanımlanmış davranışa değiştirir, ancak bu özel durumda değil. – bames53