Maison  >  Article  >  développement back-end  >  Gestion des exceptions et spécificateurs d'exception pour les fonctions C++

Gestion des exceptions et spécificateurs d'exception pour les fonctions C++

WBOY
WBOYoriginal
2024-04-12 17:33:02667parcourir

La gestion des exceptions gère les erreurs d'exécution, y compris le lancement, la capture et la gestion des exceptions. Les spécificateurs d'exception sont utilisés pour spécifier les types d'exceptions qu'une fonction peut lever, notamment nosauf(expr) (spécifie de ne pas lever d'exception) et throw() (spécifie que tout type d'exception peut être levé). Dans le cas réel, la fonction print_file utilise le spécificateur throw() et utilise le bloc try-catch pour intercepter l'exception std::runtime_error dans la fonction principale et gérer l'erreur d'ouverture de fichier.

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

Gestion des exceptions et spécificateurs d'exceptions des fonctions C++

La gestion des exceptions est le mécanisme clé pour gérer les erreurs d'exécution. Elle est divisée en trois parties : l'émission d'exceptions, la capture d'exceptions et la gestion des exceptions. En C++, les exceptions sont représentées par des classes d'exceptions.

Lancez une exception

Utilisez le mot-clé throw pour lever une exception. Une exception peut être une classe d’exception ou n’importe quel objet doté de fonctionnalités spécifiques. Par exemple : throw 关键字抛出异常。异常类或具有特定功能的任意对象都可以作为异常。例如:

throw std::runtime_error("失败!");

捕获异常

使用 try-catch 块捕获异常。try 块包含可能抛出异常的代码,而 catch 块指定如何处理不同类型的异常。例如:

try {
  // 可能抛出异常的代码
} catch (const std::runtime_error& e) {
  // 处理 std::runtime_error 异常
} catch (const std::exception& e) {
  // 处理所有其他异常
}

异常说明符

异常说明符添加到函数签名中,以指定函数可以抛出的异常类型。有两种异常说明符:

  • noexcept(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_errorrrreee

🎜Catch exceptions🎜🎜🎜Utilisez le bloc try-catch pour intercepter les exceptions. Les blocs try contiennent du code qui peut lever des exceptions, tandis que les blocs catch spécifient comment gérer différents types d'exceptions. Par exemple : 🎜rrreee🎜🎜Spécificateurs d'exception 🎜🎜🎜Des spécificateurs d'exception sont ajoutés aux signatures de fonction pour spécifier les types d'exceptions que la fonction peut lever. Il existe deux spécificateurs d'exception : 🎜
  • 🎜nosauf(expr)🎜 : La fonction spécifiée ne lève aucune exception, où expr est une expression constante.
  • 🎜throw()🎜 : La fonction spécifiée peut lever tout type d'exception.
🎜🎜Exemple pratique🎜🎜🎜Considérons une fonction qui lit un fichier et l'imprime sur la console. Cette fonction peut lever une exception car le fichier n'existe pas ou l'accès est refusé. Nous pouvons utiliser des spécificateurs d'exception et des blocs try-catch pour gérer ces situations. 🎜rrreee🎜Dans la fonction print_file, le spécificateur d'exception throw() spécifie que la fonction peut lever tout type d'exception. Dans la fonction main, nous utilisons un bloc try-catch pour gérer les exceptions. Si une erreur se produit lors de l'ouverture du fichier, une exception std::runtime_error est levée et un message d'erreur est imprimé sur la console. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn