现在的位置: 首页 > 综合 > 正文

C++类型转换—隐式&显式

2017年10月05日 ⁄ 综合 ⁄ 共 786字 ⁄ 字号 评论关闭

类型转换:

在C++语言中,某些类型之间有关联,如果两种类型有关联,那么当程序需要其中一种类型的运算对象时,可以用另一种关联类型的对象或值来替代,换句话说,如果两种类型可以相互转换,那么它们就是关联的。

隐式类型转换

1.算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 

eg:
int i=3;
double j=3.14;

i+j后i被提升为double类型

2.一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型

eg:
int i=3;
double j=3.14;

int *k=0;//0被转化为int *类型

i=j;//double->int (i为被赋值对象)

例外:void指针赋值给其他指定类型指针时,不存在标准转换,编译出错

3.将一个表达式作为实参传递给函数调用,此时形参和实参类型不一致:目标转换类型为形参的类型

eg:
extern double sqrt(double);

cout << "The square root of 2 is " << sqrt(2) << endl;//2被提升为double类型:2.0

4.从一个函数返回一个表达式,表达式类型与返回类型不一致:目标转换类型为函数的返回类型

eg:
int f(double i,double j)
{
   return i+j;//返回值为int
}

显式类型转换

有时我们需要显式地将对象强制转换成另外一种类型,例如:

int i=2,j=3;

double slope=i+j;

如果不加显式转换,那么计算出来的结果为1,不正确,显式转换如下:

int i=2,j=3;

double k=static_cast<double>(j)/static_cast<double>(i);

可以进行显示转换:static_cast,dynamic_cast,const_cast,reinterpret_cast。

抱歉!评论已关闭.