2016-11-24 20 views
3

Допустим, мы имеем:C++. Почему std :: cout << char + int печатает значение int?

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

Так что, если вы бежите:

std::cout << x + y; 

Он печатает 98 вместо 'Ъ'. Как я вижу из here <<operator имеет только int параметр реализации.

Теперь у меня есть 2 вопроса:

  1. После символ + INT операция, какой тип возвращаемых?
  2. Почему нет char параметр реализации, но std::cout << x все еще работает как ожидается, и печатает char значение?
+4

Прочитайте это: HTTP : //en.cppreference.com/w/cpp/language/implicit_conversion (раздел Числовые акции -> Интегральное продвижение) – Fefux

+1

2) Существует еще один набор [оператор, не являющийся членом <<] (http: //www.cplusplus.com/reference/ostream/ostream/operator-free /), который также работает с потоком. –

+2

И это: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 для реализации 'operator <<' для 'char'. Вы должны забыть cplusplus.com, это не очень полный веб-сайт. –

ответ

4

Благодаря Fefux, Bo Persson и Matti Virkkunen ответы:

  1. От CPP Reference: Implicit conversions:

    арифметические операторы не принимают типы меньше int как аргументы, и интегральные акции автоматически применяется после преобразование lvalue-to-rvalue, если применимо.

    Так возвращать тип x + y является int.

  2. std::cout имеет operator<<(char) как non-member.

-3

Как вы, наверное, знаете, C++ обратно совместим с C.

Оба C & C++ лечения char сек как int с.

Вы можете считать это недостатком языка, но, наоборот, это очень удобно.

Предположим, вы хотите преобразовать прописную букву в соответствующую маленькую букву. Так как любая буква имеет код ASCII 32 ниже соответствующего маленькой буквы, это так просто, как это:

char c = 'A'; 

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

Обратно вы можете конвертировать из небольшого письма буквы:

char c = 'a'; 

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

"* Как вы, наверное, знаете, C++ обратно совместим с C. *« К сожалению, это неверно. –

+0

@GillBates, почти правда. И «почти» достаточно. – user7140484

+4

«почти» не встречается нигде в вашем ответе. –

 Смежные вопросы

  • Нет связанных вопросов^_^