zoukankan      html  css  js  c++  java
  • More Effective C++ 条款2 最好使用C++转型操作符

    1. C转型操作几乎允许将任何类型转为任意其他类型,由此造成极大地不安全性。

    2. C转型操作对所有种类的转型使用一种语法,降低了代码的可读性。而C++的转型操作符则适用于更集中(狭窄)的目的。

    3. C++的转型操作符:

        static_cast:几乎与C旧式转型相同的威力与意义以及相同的限制

        const_cast:用于去除某个对象的常量性

            用法:A* a=const_cast<A*>(&a1)       //a1是与A类型的对象

            注意:

            1)可以使用一个const对象经过const_cast后调用非const成员函数(否则需要对成员函数进行const重载);

            2)一个const对象经过const_cast可以“改变”其值,但是实际上经过了编译器的某些处理,使得通过指针a获取的值是改变后的,但是通过a1获取的是仍然是未改变的                   (为了不违背a1的const属性)

        dynamic_cast:用于进行downcast操作从而支持RTTI(运行时类型检查)

            注意:

            1)对于指针类型的downcast如果失败就返回空指针,对于引用类型的downcast如果失败就抛出bad_cast异常

            2)要使用dynamic_cast,必须被转换的类类型必须要有至少一个虚函数,否则会在编译时报错,底层原因是由于大多数编译器对于dynamic_cast的实现是通过虚函数指针           所指向的虚函数表的第一个节点所存储的指针所指向的type_info类型的对象的比对实现的,因而若没有虚函数,也就没有虚函数指针,dynamic_cast也就无从谈起。

        reinterpret_cast:”为操作数的为模式提供较低层次的重新编译"

            注意:

            1)所谓的”为操作数的为模式提供较低层次的重新编译"指的是操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,例如对于float变量         1.0,如果通过static_cast转换为int型变量则转换后的结果是1,但是如果通过reinterpret_cast则在dev-c++(windows7 32位系统)下结果是1067030938。

           

  • 相关阅读:
    windows C++ 网络编程
    typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
    获取屏幕分辨率(C/C++)
    随手记
    【SQLite】可视化工具SQLite studio
    C++宽窄字符串转换
    并发编程1——一个简单的多线程程序
    css中:after和:before的作用及使用方法
    uniapp—App—自定义导航栏
    vue—封装无数据时默认展示组件
  • 原文地址:https://www.cnblogs.com/reasno/p/4601162.html
Copyright © 2011-2022 走看看