zoukankan      html  css  js  c++  java
  • 1. 转换相关的关键字

       c++有哪4个类型转换相关的关键字?各有什么特点,应该在什么场合下使用? 

    答: 相对于c风格的强制类型转换: (摘自:http://blog.sina.com.cn/s/blog_4b20940201013ryp.html)

       (T) expression; // cast expression to be of type T

            或 T(expression) 

           c++风格(新风格)的强制转换分为4中类型: 分别为

                  I. const_cast<>() :  一般用于消除对象的常量性。即:将一个const对象 转换为 非const 类型对象。 它是C++风格中进行此类转换的唯一方法。

                    class C{};

                   const C* a = new C;

                    C *b = const_cast<C*> (a); , 其他三种操作都不能修改一个对象的常量性。

                 II. static_cast<>():  应用最广,最接近于c风格的类型转换,可以用于除const对象外的其他类型转换。转换对象包括指针、基础类型。但被转换的父类没有检查是否与目的类型一致。

                  class Base{};

         class Derived: public Base{};

          Base *a = new Base;

         Derived* b = static_cast<Derived* > (a);

                 double d = 3.1415;

          int i = static_cast<int> (d); // 基本类型的转换

                 III. dynamic_cast<>():   只用于对象的指针和引用。把一个父类型向下转为子类型时(即隐式转换的相反过程),该操作会在运行时检查 返回的是否一个有效的完整对象,若不是,则返回NULL.

               class Base{virtural dummy(){}};

        class Derived : public Base{};

          Base* b1 = new Derived;

        Base* b2 = new Base;

               Derived* d1 = dynamic_cast<Derived* > (b1); // succeeds

               Derived* d2 = dynamic_cast<Derived* > (b2); // fails: return NULL

        IV. reinterpret_cast<>() : 简单的将一个指针的值进行二进制拷贝到别的指针,不做任何类型的检查和转换。

        class A{}

              class B{}

               A* a = new A;

              B* b = reinterpret_cast<B* > (a);

         新风格的好处:

            (1) 在代码中更容易识别(无论是人还是grep等工具),这样就简化了在代码中找错的过程;

            (2) 更精确地指定了每一个强制转换的目的,有效利用编译器进行错误判断。如,如果试图用const_cast以外的类型来消除常量,则编译报错。

  • 相关阅读:
    从坐标系图中理解“空间变换”
    Normal Map中的值, Tangent Space, 求算 Tangent 与 Binormal 与 TBN Matrix
    A Personal Understanding to Matrix Transformation in Graphics
    [转] 双数组前缀树
    [转] Hive简介
    [转] 远程访问服务器Jupyter Notebook的两种方法
    [转] LSTM中的pack和pad
    [转] Beam Search
    [转] linux提示符过长tips
    [转] batch normalization相关
  • 原文地址:https://www.cnblogs.com/wenshanzh/p/3277932.html
Copyright © 2011-2022 走看看