2009-08-02 142 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. 
相关问题