2016-04-08 62 views
14

Kaynak kodu aşağıdaki gibidir.Neden "cout << '\\';” ifadesi başarısız değil?

cout << '\\' << endl; //OK, output is \ 
cout << '\\\\' << endl; //OK, output is an integer 23644, but why? 

açıklamada cout << '\\\\' << endl; sınıfın ostream aşağıdaki işlevini çağırır.

_Myt& __CLR_OR_THIS_CALL operator<<(int _Val) 

Ben ifadesini '\\\\' yazmak için garip olduğunu biliyorum, Ama başarısız değil neden anlamıyorum. Sonuç nasıl açıklanır?

+1

"Hata" ile ne demek istiyorsun? Derleme başarısız olduğunu düşünüyor musunuz? Eğer öyleyse, hangi hata ile? Bu davranışı neden beklenmedik bulduğunuz belli değil. –

+2

Daha fazla tartışma için http://stackoverflow.com/q/3960954/2491746 adresine bakın. – Simple

+0

Bu soruyu röportajlarda sormayı seviyorum. –

cevap

15

Bu, çok satırlı bir literaldir ve int tipindedir.

[lex.ccon]/2

: Bir c-kömür, bir çok hazır daha fazla içeren bir değişmez

sıradan bir karakter. Çok satırlı bir değişmez ya da yürütme karakterinde gösterilemeyen tek bir c-char içeren sıradan bir karakter değişkeni koşullu olarak desteklenir, int türüne sahiptir ve uygulama tanımlı bir değere sahiptir.

Sen char const[3] olduğunu "\\\\", kullanmalısınız: İki \ ve sonunda bir boş karaktere.