C/C++基本数据类型转换总结

C++基本数据类型RANK LIST
int
unsigned int
unsigned long
long long
unsigned long long
float
double
long double

当数据类型转换发生在不同基本数据类型被运算符连接成一个表达式时

  • short,unsigned short,char,wchar_t,char16_t,char32_t不在排行榜中是因为它们在表达式中会自动提升为int类型。
  • 当运算符使用不同数据类型时,较低排名的值将被升级为较高排名值的类型。如:
int times = 10;
double vel = 3.11;
double dis = times*vel;
//times在乘法运算前,就被自动提升为RANK较高的double类型了。

当数据类型转换发生在不同基本数据类型的互相赋值时

  • 数据类型转换不会改变赋值符号右边的类型与值(即源变量本身不会被改变)。
  • 当源变量的类型级别低于目标变量时,类型将自动进行转换,且不会产生问题;而当源变量的类型级别高于目标赋值变量时,会对源变量自动进行截断并发出警告,此时我们可以考虑使用强制类型转换来避免警告。

当基本类型转换中出现布尔型(bool)时

  • 在赋值情况下,非布尔型赋给布尔型时,0转换为false,其他值转换为true;布尔型赋给非布尔型是,true转换为1,false转换为0。
  • 在表达式的情况下,布尔型会自动转换为int类型,且true值为1,false值为0。

基本数据类型的强制类型转换

  • C风格的强制类型转换,即将要转换的数据类型放在括号中,位于值要转换的操作数的前面。如:
double prices = (double)(cost/num);
  • C++强制类型转换运算符有四种,基本数据类型转换能用到的有两种,基本用法如下:
    强制类型转换运算符<要转换到的类型> (待转换的表达式)
     static_cast:静态强制转换符
     该转换符用来进行比较“自然”和低风险的转换,如整型和实数型、字符型之间的转换,另外,如果对象所属的类重载了强制类型转换运算符(如int、int *),则static_cast也能用来进行对象到T类型的转换。
    static_cast不能于不同类型的指针间的转换(不包括基类和子类指针的转换)、也不能用于整型和指针的转换、不能用于不同类型的引用间的转换。

 const_cast:常量强制转换符
 该转换符用于除去const属性的转换,即将常量变量转化为非常量变量的转换符。该强制转换符也是四个强制转换符中唯一一个能够去除常量属性的。

你可能感兴趣的:(C/C++)