Maison  >  Article  >  développement back-end  >  Explication détaillée des paramètres des fonctions C++ : la particularité du passage de paramètres dans la gestion des exceptions

Explication détaillée des paramètres des fonctions C++ : la particularité du passage de paramètres dans la gestion des exceptions

WBOY
WBOYoriginal
2024-04-26 14:00:021093parcourir

Dans la gestion des exceptions, la méthode de passage des paramètres de la fonction C++ affectera un comportement anormal : transfert de valeur : les variables locales et les paramètres de transfert de valeur seront détruits, sans affecter les données d'origine. Passage par référence : les exceptions affecteront les données d'origine, conduisant à un comportement indéfini. Transfert du pointeur : Les données d'origine ne seront pas affectées, mais les données pointées par le pointeur pourront être modifiées.

C++ 函数参数详解:异常处理中参数传递的特殊性

Explication détaillée des paramètres de fonction C++ : La particularité du passage de paramètres dans la gestion des exceptions

Il existe trois façons de passer des paramètres de fonction en C++ : le passage de valeur, le passage de référence et le passage de pointeur. Ces trois méthodes présentent des comportements différents dans la gestion des exceptions.

Passage de valeur

Le passage de valeur est la méthode de passage de paramètres par défaut. Les paramètres de fonction sont traités comme des variables locales au sein de la fonction. Lorsqu'une exception se produit dans une fonction, l'espace mémoire alloué aux paramètres de la fonction appelante sera détruit. Dans ce cas, l'exception n'affecte pas les données originales de la fonction appelante.

Cas pratique :

void func(int x) {
  // ...
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:10
}

Pass by reference

Pass by reference transmet la référence du paramètre à la fonction appelante à l'intérieur de la fonction. Lorsqu'une exception se produit dans une fonction, l'exception affectera toujours les données d'origine dans la fonction appelante.

Cas pratique :

void func(int& x) {
  // ...
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:未定义行为
}

Passer un pointeur

Le passage du pointeur transmet le pointeur du paramètre au niveau de la fonction appelante à l'intérieur de la fonction. Lorsqu'une exception se produit dans une fonction, l'exception n'affectera pas les données d'origine dans la fonction appelante. Mais les données pointées par le pointeur peuvent être modifiées.

Cas pratique :

void func(int* x) {
  // ...
  *x = 20; // 修改指针所指向的数据
  throw std::exception();
  // ...
}

int main() {
  int y = 10;
  try {
    func(&y);
  } catch (std::exception& e) {
    std::cout << e.what() << std::endl;
  }
  std::cout << y << std::endl; // 输出:20
}

Notes

Dans la gestion des exceptions, lorsqu'une exception se produit, l'espace mémoire occupé principalement par les variables locales de la fonction et les paramètres passés par valeur sera détruit. Les paramètres passés par référence ou par pointeur ne seront pas détruits et les données originales correspondantes existent toujours. Il est à noter que pour le transfert du pointeur, les données pointées par le pointeur peuvent être modifiées.

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