Rumah pembangunan bahagian belakang C++ Pengendalian pengecualian panggilan fungsi C++: pengecualian dalam nilai lulus dan pulangan parameter

Pengendalian pengecualian panggilan fungsi C++: pengecualian dalam nilai lulus dan pulangan parameter

May 02, 2024 pm 09:33 PM
c++ Pengendalian pengecualian

Abstrak: Pengendalian pengecualian dalam panggilan fungsi melibatkan: Pengecualian lulus parameter: Apabila parameter yang diluluskan menimbulkan pengecualian, pengecualian dihantar ke fungsi panggilan. Pengecualian nilai pulangan: Fungsi membuang pengecualian melalui nilai pulangan, yang dihantar terus ke fungsi panggilan. Contoh praktikal: MyClass::func() membuang pengecualian std::invalid_argument apabila parameter fungsi ialah rentetan kosong, dan fungsi main() menangkap dan mengendalikan pengecualian.

C++ 函数调用异常处理:参数传递和返回值中的异常情况

C++ pengendalian pengecualian panggilan fungsi: pengecualian dalam hantaran parameter dan nilai pulangan

Dalam C++, pengecualian semasa panggilan fungsi mungkin melibatkan penghantaran parameter dan pemprosesan nilai pulangan. Untuk mengendalikan pengecualian ini dengan betul, adalah penting untuk memahami mekanisme di sebaliknya.

Pengecualian dalam penghantaran parameter

Semasa panggilan fungsi, jika parameter yang diluluskan itu sendiri menimbulkan pengecualian, pengecualian akan dihantar kepada fungsi panggilan. Ini kerana parameter diluluskan sebagai objek biasa, sama seperti jenis data lain.

Sebagai contoh, pertimbangkan fungsi berikut:

void func(int& x) {
  if (x == 0) throw std::invalid_argument("x cannot be zero");
  ...
}
Salin selepas log masuk

Jika nilai 0 diluluskan semasa memanggil fungsi ini, pengecualian std::invalid_argument akan dilemparkan. Pengecualian ini akan diserahkan kepada fungsi panggilan dan perlu ditangkap dan dikendalikan oleh fungsi panggilan. std::invalid_argument 异常。此异常将被传递给调用函数,需要由调用函数捕获和处理。

返回值中的异常

函数还可以通过其返回值引发异常。这是通过使用 noexcept 关键字指定函数是否可能抛出异常来实现的。如果函数声明为 noexcept,则它保证不会抛出任何异常。否则,它可能抛出异常。

如果一个函数抛出一个异常,则它将被直接传递给调用函数。例如,考虑以下函数:

int func() noexcept {
  return 1;
}
Salin selepas log masuk

如果此函数抛出一个异常,则调用函数将捕获并处理该异常。

实战案例

为了说明如何处理参数传递和返回值中的异常,请考虑以下示例:

#include <iostream>
#include <string>

class MyClass {
public:
  void func(const std::string& s) {
    if (s.empty()) throw std::invalid_argument("s cannot be empty");
  }
};

int main() {
  try {
    MyClass obj;
    obj.func("");  // 抛出 std::invalid_argument
  } catch (std::exception& ex) {
    std::cout << "Caught exception: " << ex.what() << std::endl;
  }

  return 0;
}
Salin selepas log masuk

在此示例中,MyClass::func() 函数的 s 参数为空字符串时,抛出 std::invalid_argument 异常。main()

Pengecualian dalam nilai pulangan ​​

Fungsi juga boleh menimbulkan pengecualian melalui nilai pulangannya. Ini dicapai dengan menggunakan kata kunci noexcept untuk menentukan sama ada fungsi boleh membuang pengecualian. Jika fungsi diisytiharkan noexcept, ia dijamin tidak akan membuang sebarang pengecualian. Jika tidak, ia mungkin membuang pengecualian.

Jika fungsi membuang pengecualian, ia akan dihantar terus ke fungsi panggilan. Sebagai contoh, pertimbangkan fungsi berikut: 🎜rrreee🎜 Jika fungsi ini membuang pengecualian, fungsi panggilan akan menangkap dan mengendalikan pengecualian. 🎜🎜🎜Kes Praktikal🎜🎜🎜Untuk menggambarkan cara mengendalikan pengecualian dalam nilai lulus dan pulangan parameter, pertimbangkan contoh berikut: 🎜rrreee🎜Dalam contoh ini, fungsi MyClass::func() Apabila parameter code>s ialah rentetan kosong, pengecualian std::invalid_argument dilemparkan. Fungsi main() menangkap dan mengendalikan pengecualian ini. 🎜🎜🎜Kesimpulan🎜🎜🎜Memahami mekanik pengendalian pengecualian panggilan fungsi dalam C++ adalah penting untuk menulis kod yang mantap. Dengan mengendalikan pengecualian dengan betul dalam nilai lulus dan pulangan parameter, anda boleh memastikan bahawa aplikasi anda masih berfungsi seperti biasa dalam keadaan tidak normal. 🎜

Atas ialah kandungan terperinci Pengendalian pengecualian panggilan fungsi C++: pengecualian dalam nilai lulus dan pulangan parameter. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah peranan char dalam c strings Apakah peranan char dalam c strings Apr 03, 2025 pm 03:15 PM

Dalam C, jenis char digunakan dalam rentetan: 1. Simpan satu watak; 2. Gunakan array untuk mewakili rentetan dan berakhir dengan terminator null; 3. Beroperasi melalui fungsi operasi rentetan; 4. Baca atau output rentetan dari papan kekunci.

Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Apr 05, 2025 am 12:03 AM

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Empat cara untuk melaksanakan multithreading dalam bahasa c Empat cara untuk melaksanakan multithreading dalam bahasa c Apr 03, 2025 pm 03:00 PM

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Cara Mengira C-SubScript 3 Subscript 5 C-SubScript 3 Subscript 5 Algoritma Tutorial Cara Mengira C-SubScript 3 Subscript 5 C-SubScript 3 Subscript 5 Algoritma Tutorial Apr 03, 2025 pm 10:33 PM

Pengiraan C35 pada dasarnya adalah matematik gabungan, yang mewakili bilangan kombinasi yang dipilih dari 3 dari 5 elemen. Formula pengiraan ialah C53 = 5! / (3! * 2!), Yang boleh dikira secara langsung oleh gelung untuk meningkatkan kecekapan dan mengelakkan limpahan. Di samping itu, memahami sifat kombinasi dan menguasai kaedah pengiraan yang cekap adalah penting untuk menyelesaikan banyak masalah dalam bidang statistik kebarangkalian, kriptografi, reka bentuk algoritma, dll.

Fungsi Penggunaan Fungsi Jarak Jarak Jarak Penggunaan C Tutorial Penggunaan Fungsi Penggunaan Fungsi Jarak Jarak Jarak Penggunaan C Tutorial Penggunaan Apr 03, 2025 pm 10:27 PM

STD :: Unik menghilangkan elemen pendua bersebelahan di dalam bekas dan menggerakkannya ke akhir, mengembalikan iterator yang menunjuk ke elemen pendua pertama. STD :: Jarak mengira jarak antara dua iterators, iaitu bilangan elemen yang mereka maksudkan. Kedua -dua fungsi ini berguna untuk mengoptimumkan kod dan meningkatkan kecekapan, tetapi terdapat juga beberapa perangkap yang perlu diberi perhatian, seperti: STD :: Unik hanya berkaitan dengan unsur -unsur pendua yang bersebelahan. STD :: Jarak kurang cekap apabila berurusan dengan Iterator Akses Bukan Rawak. Dengan menguasai ciri -ciri dan amalan terbaik ini, anda boleh menggunakan sepenuhnya kuasa kedua -dua fungsi ini.

Bagaimana cara menggunakan nomenclature ular dalam bahasa c? Bagaimana cara menggunakan nomenclature ular dalam bahasa c? Apr 03, 2025 pm 01:03 PM

Dalam bahasa C, nomenclature ular adalah konvensyen gaya pengekodan, yang menggunakan garis bawah untuk menyambungkan beberapa perkataan untuk membentuk nama pembolehubah atau nama fungsi untuk meningkatkan kebolehbacaan. Walaupun ia tidak akan menjejaskan kompilasi dan operasi, penamaan panjang, isu sokongan IDE, dan bagasi sejarah perlu dipertimbangkan.

Penggunaan Releaseemaphore dalam C Penggunaan Releaseemaphore dalam C Apr 04, 2025 am 07:54 AM

Fungsi Release_semaphore dalam C digunakan untuk melepaskan semaphore yang diperoleh supaya benang atau proses lain dapat mengakses sumber yang dikongsi. Ia meningkatkan kiraan semaphore dengan 1, yang membolehkan benang menyekat untuk meneruskan pelaksanaan.

Masalah dengan versi dev-c Masalah dengan versi dev-c Apr 03, 2025 pm 07:33 PM

DEV-C 4.9.9.2 Kesilapan dan Penyelesaian Penyusunan Apabila menyusun program dalam sistem Windows 11 menggunakan dev-C 4.9.9.2, panel rekod pengkompil boleh memaparkan mesej ralat berikut: gcc.exe: internalerror: dibatalkan (programcollect2) PleaseSubmitafullbugreport.seeforinstructions. Walaupun "kompilasi berjaya", program sebenar tidak dapat dijalankan dan mesej ralat "Arkib kod asal tidak dapat disusun" muncul. Ini biasanya kerana penghubung mengumpul

See all articles