Maison >développement back-end >C++ >Quelle est la différence entre la gestion des erreurs des fonctions C++ et la gestion des exceptions ?

Quelle est la différence entre la gestion des erreurs des fonctions C++ et la gestion des exceptions ?

WBOY
WBOYoriginal
2024-04-24 08:00:01473parcourir

En C++, la gestion des erreurs et la gestion des exceptions sont des mécanismes différents pour gérer les situations inattendues. La gestion des erreurs utilise la variable globale errno ou la fonction GetLastError() pour définir le code d'erreur, et le développeur doit vérifier manuellement l'erreur. La gestion des exceptions génère ou capture des objets d'exception, y compris les informations et les types d'erreurs, et le compilateur gère automatiquement la propagation et la récupération des erreurs. Les principales différences incluent :

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

Différences entre la gestion des erreurs de fonction et la gestion des exceptions en C++

En C++, la gestion des erreurs et la gestion des exceptions sont des mécanismes différents pour gérer des situations inattendues.

Gestion des erreurs

  • Utilisez la variable globale errno (standard POSIX) ou la fonction GetLastError() (API Windows) pour définir un code d'erreur.
  • 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 异常
}

关键差异

特征 错误处理 异常处理
复杂性
控制 开发人员手动检查错误 编译器自动
信息 仅代码 错误类型和信息
重用 可以创建自定义异常类型
性能 较快 较慢

实战案例:文件操作

考虑使用文件操作的函数。我们可以在文件打开失败时抛出 FileNotFoundExceptionLes développeurs sont responsables de vérifier les codes d'erreur et de prendre les mesures appropriées.

Exemple :
// 定义文件未找到异常
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;
  }
}
🎜🎜Gestion des exceptions🎜🎜🎜🎜Lance ou attrape un ensemble d'objets appelés exceptions. 🎜Les objets exception contiennent des informations sur l'erreur et son type. 🎜Le compilateur gère automatiquement la propagation des erreurs et la récupération. 🎜Exemple : rrreee🎜🎜Différences clés🎜🎜
Fonctionnalités Gestion des erreurs Gestion des exceptions
Complexité Faible Élevée
Contrôle Le développeur vérifie manuellement les erreurs Le compilateur automatiquement
Informations Code uniquement Type d'erreur et informations
Réutilisation Aucune Des types d'exception personnalisés peuvent être créés td>
Performance Rapide Plus lent
🎜 🎜Cas pratique : Opération de fichier🎜🎜🎜Envisagez d'utiliser les fonctions d'opération de fichier. Nous pouvons lancer une exception FileNotFoundException lorsque l'ouverture du fichier échoue et gérer l'exception dans le programme principal. 🎜rrreee

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