#C/C++#在 C 语言中,进行类型转换只需要在变量前面加上变量类型,并且转换可以是双向的。例如 int 类型可以转换为 double 类型,double 类型也可以转换为 int 类型。但是这种简单粗暴的方式在 C++ 中是不合适的。
以 Complex 类为例,假设它有两个类型转换函数:那么下面的写法就会引发二义性:编译器可以调用 operator double 将 c1 转换为 double 类型,也可以调用 operator int 将 c1 转换为 int 类型,这两种类型都可以跟 12.5 进行加法运算,并且从 Complex 转换为 double 与从 Complex 转化为 int 是平级的,没有谁的优先级更高,所以这个时候编译器就不知道该调用哪个函数了,干脆抛出一个二义性错误,让用户解决。
FStruct是一个用于C++序列化的开源库,采用非入侵方式,无需在原有结构体上进行修改,目前支持基础类型,基础类型数组,结构体,以及vector,list,map等数据类型的序列化,支持JSON和XML两种数据格式,支持别名,支持忽略字段,最少三行代码即可完成转换。
我们在C++编程中经常遇到类型转换,如何正确运用类型转换操作符对代码质量有重要影响。下面介绍一下什么情况下需要使用哪种类型转换操作符。C++有四种强制类型转换符,分别是dynamic_cast,const_cast,static_cast,reinterpret_cast。
注意这里提到了两个概念,一个是“定义”,一个是“声明”。简单地说,“定义”就是把一个符号完完整整地描述出来:它是变量还是函数,返回什么类型,需要什么参数等等。而“声明”则只是声明这个符号的存在,即告诉编译器,这个符号是在其他文件中定义的,我这里先用着,你链接的时候再到别的地方去找找看它到底是什么吧。