zoukankan      html  css  js  c++  java
  • C++11强制类型转换、异常处理

    static_cast、reinterpret_castconst_castdynamic_cast

    1.static_cast

    • 用来进行比较“自然”和低风险的转换,比如整形和实数型、字符型之间互相转换。
    • 不能在不同类型类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类型的引用之间的转换。

    2.reinterpret_cast

    • 用来进行各种不同类型的指针之间的转换、不同类型的引用之间转换、以及指针和能容纳得下指针的整数类型之间的转换。转换的时候,执行的是逐个比特拷贝的操作。

    3.const_cast

    • 用来进行去除const属性的转换。将const引用转换成同类型的非const引用,将const指针转换为同类型的非const指针时用它。

    4.dynamic_cast

    • 专门用于将多态基类的指针或引用,强制转换为派生类的指针或引用,而且能够检查转换的安全性。对于不安全的指针转换,转换结果返回NULL。
    • 不能用于将非多态基类的指针或引用,强制转换为派生类的指针或引用。

    异常处理

    通常的做法是:在预计会发生异常的地方,加入相应的代码,但是这种做法并不总是适用的。

    …//对文件A进行了相关的操作

    fun(arg , …);//可能发生异常

    …….

    用try、catch处理异常

    如果一个函数在执行的过程中,抛出的异常在本函数内就被catch块捕获并处理了,那么该异常就不会抛给这个函数的调用者(也称“上一层的函数”);如果异常在本函数中没被处理,就会被抛给上一层的函数。

    C++标准异常类

    • C++标准库中有一些类代表异常,这些类都是从exception类派生而来。常用的几个异常类如下:

     

    • bad_cast

    在用dynamic_cast进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会抛出异常。

    • bad_allo

    在用new运算符进行动态内存分配时,如果没有足够的内存,则会引发此异常。

    • out_of_range

    用vector或string的at成员函数根据下标访问元素时,如果下标越界,就会抛出此异常。

    下面是一个类型转换异常的小例子:

    #include <iostream>
    
    using namespace std;
    
    class Base
    {
    private:
        int value;
    public:
        virtual void print()
        {
            cout << "Hello world" << endl;
        }
        Base(int value) :value(value) {};
    };
    
    class Derived :public Base
    {
    public:
        void print()
        {
            cout << "hehh" << endl;
        }
    };
    int main()
    {
        Base b(4);
        try
        {
            Derived & p = dynamic_cast<Derived &>(b);
        }
        catch (bad_cast & e)
        {
            cerr << e.what() << endl;
        }
        return 0;
    }

    程序运行结果:

     

     参考链接:

    https://www.coursera.org/learn/cpp-chengxu-sheji

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5655502.html
Copyright © 2011-2022 走看看