SORU
28 Mayıs 2012, PAZARTESİ


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
28 Mayıs 2012, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • RiverCityGraphix

    RiverCityGra

    6 Ocak 2012
  • YouChewBu

    YouChewBu

    26 Ocak 2009