当在程序的某处我们使用了一种类型而实际对象应该取另一种类型时,程序会自动进行类型转换。

bool b = 10; //b为真

把非布尔型赋予布尔类型时,0为false,否则就是true。

int i = b;  //i==1

把布尔赋予其他类型时,false转换为0,true转换为1。

i = 3.14 //i==3

把浮点数赋予整数,只保留整数部分。

double p = i; //p == 3.0

把整数赋予浮点类型,会自动添加小数点。

如果我们使用了一个非布尔值作为条件,那么它会被自动转换成布尔值。

int i = 10;
if (i) //条件为true

当一个算术表达式既有无符号数又有int值时,会把int值转换为无符号数。所以int在和无符号进行运算时,要保证int值不要为负数。

当无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负数。

不要在循环中使用unsigned

for (unsigned i = 10;i>=0;--i){
std::cout<< u << std::endl;
}

这样会进入死循环。当i为-1时会被自动转换成一个合法的无符号数,因为无符号数不会是一个负数,所以会一直循环下去。

static_cast可以对类型进行强制转换

int i = 1;
double j = static_cast<double>(i);

const_cast允许改变对象的底层const,将常量对象转换成非常量对象

const char *pc
char *p = const_cast<char*>(pc);