2009-08-02 56 views
1

在閱讀「C++的Primer Plus第五版」,我看到這一段代碼:C++中的「Ch ++」或「ch + 1」?

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

所以,這將導致顯示通道後,後面的字符。但是,如果我這樣做:

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

現在,cout會認爲ch是一個int(嘗試類型轉換)。那麼,爲什麼cout會這麼做呢? 爲什麼如果我加1到一個字符它會產生一個數字?以及爲什麼之間存在差異: ch ++和ch + 1.

+1

你可能想CH = CH + 1 – kenny 2009-08-02 11:00:39

+2

我想他指的cout << CH + 1,這的確打印int,而不是一個字符的 – itsadok 2009-08-02 11:01:26

+0

感謝itsadok,這就是我的意思。 – 2009-08-02 11:08:38

回答

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; 
} 
8

請注意 - 這是對原始問題的回答,此後已編輯。

現在,cout會認爲ch是int(嘗試 typecasting)。

不,它不會。無法在C++中更改變量的類型。

++ch; 

增加無論在ch。

ch + 1;

取ch的值(內容),加1並丟棄結果。無論什麼都不變。

1

該聲明++ch;增量chch + 1;沒有。

0

此外,rememeber那++通道「將實際運行它是在語句之​​前做增量,所以這就是爲什麼它仍然是一個燒焦。

int i = 0; 
cout << ++i << endl; 
cout << i++ << endl; 
// both will print out 1. 
相關問題