首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ throw 關鍵字深度解析:拋出異常與棄用的異常規範

     編輯:C++ 基礎

拋出異常:核心語法

throw expression; // expression 可為任意型別:int、指標、物件、字串...

異常物件在拋出點建立,透過呼叫堆疊向上傳播,直到遇到匹配的 catch。

動態陣列實戰:自訂異常類別

class OutOfRange {
    int flag, len, idx;
public:
    OutOfRange() : flag(1) {}                    // 空陣列
    OutOfRange(int l, int i) : flag(2), len(l), idx(i) {} // 越界
    void what() const {
        if (flag==1) cout << "Error: empty array";
        else cout << "Error: out of range (len " << len << ", idx " << idx << ")";
    }
};

class Array {
    int *p, len, cap, step=50;
public:
    Array() { p=(int*)malloc(step*sizeof(int)); cap=step; len=0; }
    ~Array() { free(p); }
    int& operator[](int i) {
        if (i<0 || i>=len) throw OutOfRange(len, i);
        return p[i];
    }
    int push(int e) { /* 擴容邏輯 */ p[len++]=e; return len-1; }
    int pop() { if (len==0) throw OutOfRange(); return p[--len]; }
    int length() const { return len; }
};

// 使用
Array a;
for (int i=0; i<10; ++i) a.push(i);
try { cout << a[20]; } catch (OutOfRange& e) { e.what(); }
try { for (int i=0; i<20; ++i) a.pop(); } catch (OutOfRange& e) { e.what(); }

異常規範:已棄用特性 (C++11 起)

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved