您的位置:首页 > 编程语言 > C语言/C++

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

2014-12-10 12:19 239 查看
类型转换:

在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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: