C++转换

隐式类型转换:(算术转换)

       转换规则是小类型总是被提升成大类型以防止精度损失,这些转换由编译器自动完成无需程序员介入。

1、 在混合类型的算术表达式中在这种情况下最宽的数据类型成为目标转换类型这也被称为算术转换

2、 用一种类型的表达式赋值给另一种类型的对象在这种情况下目标转换类型是被赋值对象的类型

3、 把一个表达式传递给一个函数调用表达式的类型与形式参数的类型不相同在这种情况下目标转换类型是形式参数的类型

4、从一个函数返回一个表达式表达式的类型与返回类型不相同在这种情况下目标转换类型是函数的返回类型

算术转换


算术转换保证了二元操作符如加法或乘法的两个操作数被提升为共同的类型然后再用它表示结果的类型两个通用的指导原则如下
1 为防止精度损失如果必要的话类型总是被提升为较宽的类型
2 所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型

     在进行整值提升时类型char signed char unsigned char 和short int 都被提升为类型int

       long 类型的一般转换有一个例外如果一个操作数是long 型而另一个是unsigned int型那么只有机器上的long 型足够长以便能够存放unsigned int 的所有值时一般来说在32 位操作系统中long 型和int 型都用一个字长来表示所以不满足这里的假设条件unsigned int 才会被转换为long 型否则两个操作数都被提升为unsigned long 型若两个操作数都不是long 型而其中一个是unsigned int 型则另一个也被转换成unsignedint 型否则两个操作数一定都是int 型

显式转换

显式转换也被称为强制类型转换cast 包括下列命名的强制类型转换操作符static_cast dynamic_cast const_cast 和reinterpret_cast 虽然有时候确实需要强制类型转换但是它们也是程序错误的源泉通过使用它们程序员关闭了C++语言的类型检查设施。

任何非const 数据类型的指针都可以被赋值给void*型的指针void*型指针被用于对象,的确切类型未知或者在特定环境下对象的类型会发生变化的情况下有时void*型的
指针被称为泛型generic 指针因为它可以指向任意数据类型的指针。

显式转换符号的一股形式如下 cast-name< type >( expression );

旧式强制转换符号有下列两种形式
// C++强制转换符号
type (expr);
// C 语言强制转换符号
(type) expr;

原文地址:https://www.cnblogs.com/fvsfvs123/p/3116886.html