C++中的数据类型强制转换

来源:百度知道 编辑:UC知道 时间:2024/04/28 23:02:59
int b = 12;
short c = 0;
c = (short)b;

int b = 12;
short c = 0;
c = short(b);

这两种强制转换有什么区别吗?

1、C++的四种强制类型转换,所以C++不是类型安全的。
分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast
2、四种转换的区别:
static_cast:可以实现C++中内置基本数据类型之间的相互转换。
const_cast: const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。
reinterpret_cast: 有着和C风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。
dynamic_cast: 其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。不能用于内置的基本数据类型的强制转换。dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过

(type)var 这种是从C里继承下来的叫C-Style cast, C风格转换, 只可用于内置类型之间的转换.

type(var)是C++加入的叫Function-Style cast, 函数式转换, 用于内置类型时和C-Style cast效果相同, 但它还可以用于类与内置类型, 类与类之间的转化, 如:

cout << string("123").size();

则只可以用函数式转化, 你不能:

cout << (string)"123".size();

另外C++中还有其自带的C++专用cast:
static_cast, const_cast, dynamic_cast, reinterpret_cast.

转换的含义是通过改变