`

[C++][Casting] C++ 四种 cast使用

    博客分类:
  • C++
阅读更多
http://www.cnblogs.com/yawer/archive/2007/11/27/973909.html

dynamic_cast—多态类型的转化
  表达式:dynamic_cast(expression)把操作数expression转化为一个type-id对象。type-id必须是一个指针或者是一个引用。如果type-id是一个指针,那么expression必须是一个指针。如果type-id是一个引用,那么expression是一个左值表达式。

static_cast非多态类型转化
  static_cast操作符将expression转化为type-id类型。没有运行时检查来确保这项转化是安全的转化。
  static_cast操作符可以用来将基类的指针转化为派生类的指针,这样的转化都不总是安全的。
  一般的,可以使用static_cast来将数字数据类型(enums)转化为ints,或者将ints转化为floats.你能够确保数据类型包含在转化之中。static_cast没有dynamic_cast安全。因为static_cast没有运行时检查。当遇到有歧义的指针时,dynamic_cast会失败,而static_cast将返回,好像没有任何错误一样。这是非常危险的。虽然dynamic_cast是安全的,但是它仅适用于指针和引用,并且运行时检查是一个负担。

 const_cast
  cosnt_cast用来移除const,volatile和_unaligned属性。
  const_cast操作符能够用来移除类中的const,volatile和_unaligned属性。
  一个任何对象类型的指针或者一个数据成员的指针能够显示的转化为相同的类型,除了const,volatile和_unaligned标识符。对于指针和引用,结果将引用原始的对象。对于数据成员指针,结果将指向原始数据指针所指向的数据成员。依靠引用对象的雷ixng,一个结果指针(引用、数据成员)的写操作将产生undefined行为。

  reinterpret_cast
  用来简单的重新解释bits.
  reinterpret_cast操作符允许任何指针转化为任何其他的指针类型。它允许任何整型类型转化为任何指针类型,反方向也一样。误用reinterpret_cast操作符是不安全的。除非需要的转化是固有的低级别的。
  reinterpret_cast操作符用来将char * 转化为int *或者One_class*转化为Unrelated_class*,这样是内在的不安全的。
  reinterpret_cast的结果不能够安全的使用除了转化为它的原始类型。其它的使用都是不可移植的。
  reinterpret_cast操作符不能够去除const,volatile或者__unaligned属性,可以用const_cast来去除。
  reinterpret_cast操作符将null指针转化为null指针。
分享到:
评论

相关推荐

    Google C++编程规范中文版

    Google建议使用C++11中的强类型转换,如`static_cast`、`dynamic_cast`等,以提高类型安全性和代码可读性。 - **流 (Streams):** 流用于输入/输出操作,提供了一种方便的方式来读写数据。Google建议使用标准库中的...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    Friends Exceptions Run-Time Type Information (RTTI) Casting Streams Preincrement and Predecrement Use of const Integer Types 64-bit Portability Preprocessor Macros 0 and NULL sizeof Boost C++0x ...

    Google代码规范(C++)<中文>

    C++提供了多种类型的转换,包括C-style cast、static_cast、const_cast、dynamic_cast和reinterpret_cast。应当根据具体需求选择合适的转换类型。 **9. 流(Streams)** 流是用于输入输出的强大工具。使用流进行I/...

    Google C++编程规范(pdf 英文)

    - **Casting**:转换类型时应选择正确的类型转换运算符,例如`static_cast`、`dynamic_cast`等。 - **Streams**:使用标准库中的流对象(如`std::cout`和`std::cin`)来进行输入输出操作。 - **Preincrement and ...

    C++编程风格与编程技巧

    12. **类型转换与造型キャスト**:C++中,从`void*`到其他类型的转换通常需要造型(casting),如`(Type*)pointer`或`static_cast*>(pointer)`。 13. **const的使用**:`const`关键字用于表示不可修改的变量,可...

    Google C++ Style Guide.doc

    19. **Casting**:优先使用C++的静态类型转换(`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`),避免使用C-style的旧式类型转换。 20. **Streams**:使用`iostream`库进行输入/输出操作,如`...

    Google C++ 编程规范(精心制作的链接文档-方便查看学习)

    - **Casting**:C++中的各种类型转换方式(static_cast、dynamic_cast、const_cast、reinterpret_cast)应根据具体情况进行选择。 - **Streams**:流操作符(、>>)用于输入输出操作,提供了更高级别的抽象。 - *...

    Google C++ Style Guide_英文版.pdf

    - **Casting:** Prefer static_cast, dynamic_cast, const_cast, and reinterpret_cast over C-style casts. - **Streams:** Use streams for I/O operations. Prefer formatted I/O over unformatted I/O. - **Pre-...

    some useful doc

    C++提供了多种类型转换方式,包括隐式转换和显式转换,如静态类型转换(static_cast)、动态类型转换(dynamic_cast)、强制类型转换(C-style cast)和 reinterpret_cast。`casting_spells.pdf`很可能深入讨论了...

    acpi控制笔记本风扇转速

    independent acpica.lib produced by the Microsoft Visual C++ 6.0 32- bit compiler. The debug version of the code includes the debug output trace mechanism and has a much larger code and data size. ...

    tools-types:操作类型

    4. **类型转换(type casting)**:包括隐式和显式转换,如`(int)var`(强制转换)和`static_cast(var)`(静态类型转换)。 5. **智能指针(smart pointers)**:如`std::unique_ptr`和`std::shared_ptr`,用于管理...

    chapter46e函数.doc

    3. 将一种类型转换为另一种类型称为类型转换或“casting”。 4. 表达式 `(pow(2, sqrt(9.0) + ceil(0.99)))` 的值是 `16`,因为 `sqrt(9.0)` 结果是 `3.0`,`ceil(0.99)` 是 `1.0`,所以表达式变为 `pow(2, 4)`,即...

Global site tag (gtag.js) - Google Analytics