++ 03.
void main(void)
{
int x,y,z;
x=y=z=1; // Seq1 at ;
z = x && y && ++z;//is this fine? // Seq2 at ;
}
Not: var dizisi noktası operatör & & sahiptir, ancak daha sonra bu, bu örnekte ilgili değildir unutmayın.
Fine! Genel olarak, olmayabilir veya olmayabilir. X ve y değerlerine bağlıdır. Özel durumunuzda, iyi değil. Bu kod, undefined behavior adında bir şeye sahip olma potansiyeline sahiptir. daha sonra skaler 'Z', iki sekans arasında ekspresyon içinde bir kereden daha fazla modifiye edilir (daki örnekte olduğu gibi x ve y 1 çünkü) Z ++ değerlendirilmişse
, SEQ1 ve Seq2 (aşağıya bakınız) işaret eder. Ödev operatörünün herhangi bir sıralama noktası koymadığını not etmek önemlidir. Aksi belirtilmedikçe/4-"
$ 5, sipariş bireysel operatörleri ve bireysel ifadelerin subexpressions ve yan etkileri gerçekleştiği düzenin işlenenlerden değerlendirmenin , unspecified.53 olduğunu) önceki ve sonraki dizi nokta skalar nesne arasında bir ifadenin değerlendirilmesi ile en fazla bir kere tadil edilmiş depolanmış değeri sahip olacaktır. Bundan başka, önceki değeri de sadece erişilebilir olacaktır Saklanacak değerini sonlandırın. Bu paragrafının gereksinimleri, tüm bir ifadenin alt ifadelerinin izin verilen sıralaması için karşılanacaktır; aksi davranış ". Tanımsız C++ 0x olarak
Kendimi @litb ile anılan tartışmanın ayrıntıları anladıktan sonra
güncellemek olacaktır.Şimdilik, sadece anladığım kadarıyla, dizi noktalarının hiçbir kavram vardır, ancak C++ 0x ile
kapalı çarpıcı ediyorum. Bu ifade gayet iyi ve tanımlanmamış davranışları çağırmıyor. Bunun nedeni, ++'nın 'z' üzerindeki etkisinin, atamanın 'z' üzerindeki yan etkisinden önce sıralanmasıdır.
$ 1,9/15- "belirtildiği yerler, bireysel operatörlerin işlenenlerden ve tek ifadelerin alt ifadelerin değerlendirmeler unsequenced [Not vardır hariç:. Bir ifadesi yılında sırasında bir kez fazla değerlendirildiği bir programın çalıştırılması, onun alt ifadelerin dizilenmemiş ve belirsiz dizilenmiştir değerlendirmeler farklı değerlendirmelerde sürekli olmak zorunda değildir.arasında ucuna bağlı bir vaziyette not] değeri hesaplamaları Bir operatörün 210 işlenen operatörün sonuç değeri hesaplama önce dizilenir. skalar nesne üzerinde bir yan etki, aynı sayısal nesne başka yan etki veya değer, aynı sayısal nesnenin kullanılarak bir değer hesaplama birine unsequenced göre ise, davranışı tanımlanmamıştır.
$ 3,9/9 - "Aritmetik türleri (3.9.1), sıralama türleri, işaretçi türleri, üye türleri (3.9.2), Std :: nullptr_t için işaretçi ve bunların CV-kalifiye versiyonlar (3.9.3), skaler türleri olarak adlandırılan şeklindedir. "
Not bu ifadede 'z = z ++;' z, bir skalar değişkendir, atama operatörü ve postfix operatörü ++ 'dan dolayı' z 'üzerindeki yan etkiler ayrıştırılmamıştır (her ikisi de diğerinden önce sıralanmamıştır).
Teşekkür @Prasoon Bu hat gayet veya is derleyici kontrol izin vermeyin olmadığını bilmek orijinal sürümüne
Dönüş türü:
Programınız bu uyarıyı üretir. –