C++类型转换符

来自cppreference.com
< cpp‎ | keyword


标准C++不仅支持C风格类型转换符,还定义了以下四种类型转换符:

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast

定义这些类型转换符是为了提供更好的类型检查。

[编辑] 一、C风格类型转换符的缺点

C++支持以下两种形式的C风格类型转换:

    int age=(int)sqrt(foo/3.25);
    int age=int(sqrt(foo/3.25));

但是,这样会使程序的意图不明确,因为相同的语法你却使用不同的类型转换符...

(译者:不是很明白这一段是什么意思,希望哪位大侠能更改一下)

[编辑] 二、四种类型转换符

  1. static_cast是这四种中最常用的。它可用于任何隐含的类型转换——一般来说,当一个隐含的类型转换导致信息丢失时,编译器就会输出警告信息,但你如果使用static_cast的话,编译器就不会输出这些警告信息。static_cast可以用于类类型的向上或向下转换(dynamic_cast也可以,但不同的是,static_cast不会进行动态类型检查,因此它的安全性要由程序员来保证)。
  2. const_cast可以用来移除一个变量的const或volatile属性。
  3. dynamic_cast可以用来对一个多态的指针或引用进行类类型向上、向下转换。注意:dynamic_cast进行动态类型检查,因此,在对一个指针进行类型转换时,如果对象不是编译器所期望的类型,它将会返回NULL;在对引用进行类型转换时,它会抛出一个std::bad_cast异常。
  4. reinterpret_cast用于两个不相关类型之间的类型转换。这个关键词在我们需要把类型映射回原有类型时用到它.我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的(这句话是C++编程思想中的原话)。

相关链接: http:www.acm.org/crossroads/xrds3-1/ovp3-1.html