C核心技术手册(二十四)

第四章 类型转换

C中,不同类型的操作可以化合成一个操作,例如,下面的表述式:

Double dVar = 2.5 //Define dVar as a variable of type double.

dVar *= 3; //Multiply dVar by an integer constant.

If ( dVar < 10L ) //Compare dVar with a long-integer constant

{ /* … */}

当操作数据具有不同的类型时,确定的场景下,在执行操作前,编译器会尝试将它们转换来统一的类型,而且,你必须在程序中插入类型转换指令,类型转换产生的结果具有新的类型, 可能是void类型(表示表达式的值被丢弃),或都是数学精英或指针,例如,结构体指针可能会被转化为不同的指针类型,然而,一个实际的结构体值不能被转换为不同的结构体类型。

当操作数的类型使用不恰当时,编译器使用一个隐式的类型转换,或者调用函数时传入一个与形参类型不匹配的参数,在变量初始化或者赋值时,编译器在必要时也会执行隐式转换。

你也可以显式地使用cast操作符进行类型转换。

(type_name) expression

在下面的例子中,cast操作符将两个整形相除的结果转换为浮点型:

Int sum = 22, count = 5;

Double mean = (double)sum/count;

因为cast操作符的优先级高于除法,所以在例子中,变量sum先被转换为double类型,然后编译器隐式地将除数count转换为相同的类型。然后才进行除法操作。

当可能发生信息丢失时,你要尽可能地使用cast操作,就像int转换为unsigned int,例如,显式的转换避免了编译器告警,例如,将一个函数的返回值使用void转换丢弃,这样会使用你可能也丢弃了错误指示,但这却没有告警。

本章中会举例说时编译器提供的隐式转换,然而,却很少有使用cast操作符的例子,除非很必要。

你可能感兴趣的:(技术)