参考材料: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者之一
C++: Type Conversion (数字,指针,其他type)