문제

"C ++ Primer Plus 5th Edition"을 읽는 동안이 코드를 보았습니다.

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

따라서 Ch. 후 다음 문자를 표시합니다. 그러나 내가 그렇게한다면 :

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

이제 Cout은 CH가 int라고 생각할 것입니다 (Typecasting 시도). 그렇다면 왜 Cout은 그렇게합니까? 그리고 왜 내가 숯에 1을 추가하면 숫자를 생산할 것인가?. Ch ++와 CH+1 사이에 차이가있는 이유.

도움이 되었습니까?

해결책

이것이 일어나는 이유는 문자의 유형입니다. 1 int입니다. int와 char를 추가하면 int를 얻지 만 숯을 증가 시키면 숯으로 남아 있습니다.

이 시도:

#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라고 생각할 것입니다 (Typecasting 시도).

아니요. C ++에서 변수의 유형을 변경할 수 없습니다.

++ch;

Ch.

ch + 1;

ch의 값 (내용)을 취하고 1을 추가하고 결과를 폐기합니다. CH에있는 것은 변경되지 않습니다.

진술 ++ch; 증분 ch 반면 ch + 1; 그렇지 않습니다.

또한 '++ ch'가 실제로 진술서를 실행하기 전에 증분을 수행한다는 것을 기억합니다. 그래서 그것이 숯으로 남아 있습니다.

int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top