& # 8220; Ch ++ & # 8221; или & # 8220; ch + 1 & # 8221; в С ++?

StackOverflow https://stackoverflow.com/questions/1218648

  •  10-07-2019
  •  | 
  •  

Вопрос

Читая «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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top