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

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • mist64

    mist64

    30 Mayıs 2006
  • Tinkernut

    Tinkernut

    28 Aralık 2006