首頁 >後端開發 >C++ >C++ 函式錯誤處理與異常處理有何不同?

C++ 函式錯誤處理與異常處理有何不同?

WBOY
WBOY原創
2024-04-24 08:00:01479瀏覽

在 C 中,錯誤處理和異常處理是處理意外狀況的不同機制。錯誤處理使用 errno 全域變數或 GetLastError() 函數設定錯誤碼,需由開發人員手動檢查錯誤。異常處理則拋出或捕獲異常對象,包含錯誤訊息和類型,由編譯器自動處理錯誤傳播和恢復。主要差異包括:

C++ 函数错误处理与异常处理有何区别?

C 函數錯誤處理與異常處理的差異

在C 中,錯誤處理和異常處理是處理意外狀況的不同機制。

錯誤處理

  • 使用errno 全域變數(POSIX 標準)或GetLastError() 函數(Windows API)設定一個錯誤碼。
  • 開發人員負責檢查錯誤碼並採取適當的措施。
  • 範例:
// 打开文件
FILE* fp = fopen("file.txt", "r");

// 检查错误
if (fp == NULL) {
  int errnum = errno;
  // 根据 errnum 采取适当的措施
}

異常處理

  • #拋出或捕獲一組稱為例外的物件。
  • 異常物件包含有關錯誤的資訊和類型。
  • 編譯器會自動處理錯誤的傳播和復原。
  • 範例:
class MyException : public exception {
public:
  const char* what() const noexcept {
    return "This is an example exception.";
  }
};

// 抛出一个异常
throw MyException();

// 捕获异常
try {
  // 代码可能抛出异常
} catch (MyException& e) {
  // 处理 MyException 异常
}

關鍵差異

#錯誤處理 異常處理
複雜性
##控制 開發人員手動檢查錯誤 編譯器自動
#訊息 僅程式碼 錯誤類型與資訊
重複使用

#可以建立自訂例外類型

性能######較快######較慢###################實戰案例:檔案操作##########考慮使用文件操作的函數。我們可以在檔案開啟失敗時拋出 ###FileNotFoundException### 異常,並在主程式中處理該例外狀況。 ###
// 定义文件未找到异常
class FileNotFoundException : public exception {
public:
  const char* what() const noexcept {
    return "File not found.";
  }
};

// 打开文件的函数
void openFile(const char* filename) {
  FILE* fp = fopen(filename, "r");
  if (fp == NULL) {
    throw FileNotFoundException();
  }
}

// 主程序
int main() {
  try {
    openFile("myfile.txt");
  } catch (FileNotFoundException&) {
    cout << "File not found." << endl;
  }
}

以上是C++ 函式錯誤處理與異常處理有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn