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
Libérer: 2024-04-24 08:00:01
original
478 Les gens l'ont consulté

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 采取适当的措施
}
Copier après la connexion

异常处理

  • 抛出或捕获一组称为异常的对象。
  • 异常对象包含有关错误的信息和类型。
  • 编译器自动处理错误的传播和恢复。
  • 示例:
class MyException : public exception {
public:
  const char* what() const noexcept {
    return "This is an example exception.";
  }
};

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

// 捕获异常
try {
  // 代码可能抛出异常
} catch (MyException& e) {
  // 处理 MyException 异常
}
Copier après la connexion

关键差异

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

实战案例:文件操作

考虑使用文件操作的函数。我们可以在文件打开失败时抛出 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;
  }
}
Copier après la connexion
🎜🎜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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal