Print < için doğru cevap ne;< c << c;?
Geçenlerde bir röportajda aşağıdaki amaç tip bir soru vardı.
int c = 0;
cout << c << c;
Cevap:
bir. 10
b. 01
c. tanımsız davranış
B seçeneği cevap verdim, yani çıkış olurdu "01".
Ama benim için sürpriz, daha sonra doğru cevabı c seçeneği olan bir muhabir tarafından söylendi: tanımsız.
Şimdi, C sırası puan kavramını biliyorum . Bu davranış, aşağıdaki ifadeyi tanımsız:
int i = 0;
i = i i ;
ama bu deyim benim anladığım başına cout << c << c
, ostream.operator<<()
iki kez, ilk ostream.operator<<(c )
ostream.operator<<(c)
sonraki " olarak kabul eder.
Ben de VS2010 derleyici sonucu kontrol etti ve çıkışını da '01'.
CEVAP
Düşünebilirsiniz:
cout<<c <<c;
Olarak:
std::operator<<(std::operator<<(std::cout, c ), c);
C önceki tüm değerlendirmeler yan etkileri sequence points yapılmış olduğunu garanti eder. Tartışma c
değişken std::operator<<(std::cout, c )
önce veya sonra değerlendirilecek, yani fonksiyon değişkenleri değerlendirilmesi arasında sıra noktaları vardır. Yukarıdaki sonuç tanımsızdır.
Doğru kullanımı Android kullanıcısı Yö...
C için doğru sürüm numaraları ne#?...
Nasıl pi benim hesaplama doğru olup ol...
Modern Python özel istisnalar bildirme...
Pptx vb docx için doğru mıme türü nedi...