C++ 関数の例外処理と例外指定子

WBOY
リリース: 2024-04-12 17:33:02
オリジナル
663 人が閲覧しました

例外処理は、例外のスロー、キャッチ、処理などの実行時エラーを処理します。例外指定子は、関数がスローできる例外のタイプを指定するために使用されます。これには、noExcept(expr) (例外がスローされないことを指定する) および throw() (任意のタイプの例外がスローされる可能性があることを指定) が含まれます。実際の場合、print_file 関数は throw() 指定子を使用し、try-catch ブロックを使用して main 関数の std::runtime_error 例外をキャッチし、ファイル オープン エラーを処理します。

C++ 函数的异常处理和异常说明符

#C 関数の例外処理と例外指定子

例外処理は、ランタイム エラーを処理するための重要なメカニズムです。 3 つの部分: 例外のスロー、例外のキャッチ、および例外の処理。 C では、例外は例外クラスによって表されます。

例外をスローする

例外をスローするには、

throw キーワードを使用します。例外クラスまたは特定の機能を持つオブジェクトは例外として機能します。例:

throw std::runtime_error("失败!");
ログイン後にコピー

例外のキャッチ

例外をキャッチするには、

try-catch ブロックを使用します。 try ブロックには例外をスローする可能性のあるコードが含まれており、catch ブロックにはさまざまな種類の例外を処理する方法が指定されています。例:

try {
  // 可能抛出异常的代码
} catch (const std::runtime_error& e) {
  // 处理 std::runtime_error 异常
} catch (const std::exception& e) {
  // 处理所有其他异常
}
ログイン後にコピー

例外指定子

例外指定子は、関数がスローできる例外の種類を指定するために関数シグネチャに追加されます。例外指定子は 2 つあります。

  • noreason(expr): 指定された関数は例外をスローしません。expr は定数式です。
  • throw(): 指定された関数は、あらゆる種類の例外をスローできます。

実際的なケース

ファイルを読み取り、それをコンソールに出力する関数を考えてみましょう。ファイルが存在しないか、アクセスが拒否されたため、この関数は例外をスローする場合があります。例外指定子と

try-catch ブロックを使用して、このような状況に対処できます。

#include <iostream>
#include <fstream>

void print_file(const std::string& file_name) {
  std::ifstream file(file_name);
  if (!file.is_open()) throw std::runtime_error("无法打开文件!");

  std::string line;
  while (std::getline(file, line)) {
    std::cout << line << std::endl;
  }
}

int main() {
  try {
    print_file("test.txt");
  } catch (const std::runtime_error& e) {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}
ログイン後にコピー

関数

print_file の例外指定子 throw() は、関数があらゆる種類の例外をスローできることを指定します。 main 関数では、try-catch ブロックを使用して例外を処理します。ファイルを開くときにエラーが発生した場合、std::runtime_error 例外がスローされ、エラー メッセージがコンソールに出力されます。

以上がC++ 関数の例外処理と例外指定子の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート