2016-11-24 5 views
3

Lassen Sie uns sagen, wir haben:C++. Warum std :: cout << char + int druckt int-Wert?

char x = 'a'; 
int y = 1; 

Also, wenn Sie laufen:

std::cout << x + y; 

Er druckt 98 anstelle von 'b'. Wie ich sehe von here <<operator hat nur Int Parameter Implementierung.

Ab jetzt habe ich 2 Fragen:

  1. Nach char + int Operation, welche Art zurückgegeben wird?
  2. Warum gibt es keine char Parameter-Implementierung, aber std::cout << x funktioniert immer noch wie erwartet und druckt char Wert?
+4

dies lesen: http : //en.cppreference.com/w/cpp/language/implicit_conversion (Abschnitt Numerische Promotions -> Integrale Promotion) – Fefux

+1

2) Es gibt einen weiteren Satz von [Nicht-Mitgliedsoperator <<] (http: //www.cplusplus.com/reference/ostream/ostream/operator-free /) das funktioniert auch mit dem Stream. –

+2

Und das: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 für die Implementierung von 'operator <<' für 'char'. Sie sollten cplusplus.com vergessen, es ist keine sehr umfassende Website. –

Antwort

-3

Wie Sie wahrscheinlich wissen, ist C++ abwärtskompatibel mit C.

Sowohl C & C char s wie int s ++ zu behandeln.

Sie können dies als einen Fehler der Sprache betrachten, aber im Gegenteil, das ist sehr praktisch.

Angenommen, Sie möchten einen Großbuchstaben in den entsprechenden Kleinbuchstaben umwandeln. Da jeder Großbuchstabe einen ASCII-Code 32 unter den entsprechenden kleinen Buchstaben hat, ist dies so einfach wie diese:

char c = 'A'; 

std::cout << (char) (c + 32); // output: 'a' 

Umgekehrt Sie aus kleinen Buchstaben zu Großbuchstaben umwandeln können:

char c = 'a'; 

std::cout << (char) (c - 32); // output: 'A' 
+8

"* Wie Sie wahrscheinlich wissen, ist C++ abwärtskompatibel mit C. *" Leider stimmt das nicht. –

+0

@GillBates, fast wahr. Und das "fast" ist genug. – user7140484

+4

"fast" ist nirgendwo in Ihrer Antwort zu finden. –

Verwandte Themen