首页 > 代码库 > C++: Type Conversion (数字,指针,其他type)

C++: Type Conversion (数字,指针,其他type)

参考材料:C++ primer 5th, 4.11

起因是UNIX中一些函数返回void *指针,使用之前要转换成char *指针使用,不清楚会出现什么现象,所以找到type conversion来看


*************************************************************************************

第一部分是implicit conversion

*************************************************************************************

首先,一些总的概念要有:

《arithmetic type conversion》

1--》在做类似“ 3.14 + 3 ”的运算时,C++定义的操作不是将两个不同的type(int,double)直接相加,而是将这两个操作数转换到一个共同的type再做运算。

2--》以上type conversion“are carried out automatically without programmer intervention”,for that reason,it is referred to as "implicit conversions"

3--》"implicit conversions" + “between arithmetic types”时

总的rule是,尽量的preserve precision。所以上述运算会先将“3”转换成type double


《initialization》

1--》"In an initialization, the type of the object we are initializing dominates":即会把initializer转换成要被initialized的object的类型如:int ob = 3.14;会将3.14转换成int


《compiler会进行implicit conversion的场合》

&4.11

《详细的arithmetic type conversions》

&4.11.1


《除了arithmetic之外的一些implicit conversion》

--》void * pointer与其他类型的pointer之间的转换:不会有内容的丢失

--》在condition中,pointer和arithmetic type自动地转换到bool:pointer和arithmetic为0时,都automatically转为false;otherwise,都转为true

--》可以将pointer or referencne to a nonconst type to a pointer or reference to "corresponding" const type

--》在class中自己define conversion可以让compiler在需要时应用这个conversion



*************************************************************************************

第二部分是explicit conversion

*************************************************************************************

要有概念:现在C++的explicit conversion是在“static_cast, dynamic_cast, const_cast”三者中选。

以前C++的explicit conversion是(type) expr。

当使用(type) expr时,会根据type involved使用以上3者之一