& # 8220; Ch ++ & # 8221; или & # 8220; ch + 1 & # 8221; в С ++?
Вопрос
Читая «C ++ Primer Plus 5th edition», я увидел этот фрагмент кода:
cin.get(ch);
++ch;
cout << ch;
Итак, это приведет к отображению следующего символа после ch. Но если бы я сделал это так:
cin.get(ch);
cout << ch+1;
Теперь cout будет думать, что ch - это int (попробуйте типизацию). Итак, почему Cout так делает? И почему, если я добавлю 1 к символу, он выдаст число? И почему есть разница между: ch ++ и ch + 1.
Решение
Причина этого заключается в том, что тип литерала 1
равен int. Когда вы добавляете int и char, вы получаете int, но когда вы увеличиваете char, он остается char.
Попробуйте это:
#include <iostream>
void print_type(char)
{
std::cout << "char\n";
}
void print_type(int)
{
std::cout << "int\n";
}
void print_type(long)
{
std::cout << "long\n";
}
int main()
{
char c = 1;
int i = 1;
long l = 1;
print_type(c); // prints "char"
print_type(i); // prints "int"
print_type(l); // prints "long"
print_type(c+i); // prints "int"
print_type(l+i); // prints "long"
print_type(c+l); // prints "long"
print_type(c++); // prints "char"
return 0;
}
Другие советы
Обратите внимание - это ответ на оригинальный вопрос, который с тех пор был отредактирован.
Теперь cout будет думать, что ch является int (попробуйте типажи). р>
Нет, не будет. Невозможно изменить тип переменной в C ++.
++ch;
увеличивает все, что находится в ch.
ch + 1;
принимает значение (содержимое) ch, добавляет к нему 1 и отбрасывает результат. Все, что находится в канале, остается неизменным. Р>
Оператор ++ ch;
увеличивает значение ch
, тогда как ch + 1;
этого не делает.
Кроме того, помните, что «++ i» будет делать приращение до фактического выполнения оператора, в котором он находится, поэтому он остается символом.
int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.