1

「C++Primer Plus 5th edition」を読んでいるときに、次のコードを見ました。

    cin.get(ch);
    ++ch;
    cout << ch;

したがって、これにより、chの後に次の文字が表示されます。しかし、私がそのようにした場合:

    cin.get(ch);
    cout << ch+1;

これで、coutはchがintであると見なします(型キャストを試してください)。それで、なぜcoutはそうするのですか?また、charに1を追加すると、数値が生成されるのはなぜですか。そして、なぜ:ch++とch+1の間に違いがあるのか​​。

4

4 に答える 4

18

これが発生する理由は、リテラルのタイプ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;
}
于 2009-08-02T11:11:59.520 に答える
8

注意してください-これは、編集された元の質問に対する回答です。

これで、coutはchがintであると見なします(型キャストを試してください)。

いいえ、そうではありません。C++では変数の型を変更することはできません。

++ch;

chにあるものは何でもインクリメントします。

ch + 1;

chの値(contents)を取得し、それに1を加算して、結果を破棄します。chにあるものは何でも変更されません。

于 2009-08-02T10:51:33.337 に答える
1

ステートメントは++ch;増加しますchが、増加ch + 1;しません。

于 2009-08-02T10:55:36.043 に答える
0

また、「++ ch」は、実際にステートメントを実行する前にインクリメントを実行するため、charのままであることに注意してください。

int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.
于 2012-12-03T05:49:20.760 に答える