C++ 中的棧展開
在這裡,我們將瞭解堆疊展開的含義。當我們呼叫一些函式時,它將地址儲存到呼叫堆疊中,然後在從函式返回後彈出地址,從其離開的位置開始工作。
堆疊展開是一個在執行時刪除函式呼叫堆疊條目的過程。要刪除堆疊元素,我們可以使用異常。如果從內部函式丟擲異常,則將刪除堆疊中的所有條目,並返回到主呼叫函式。
讓我們透過一個示例瞭解堆疊展開的效果。
示例程式碼
#include <iostream>
using namespace std;
void function1() throw (int) { //this function throws exception
cout<<"\n Entering into function 1";
throw 100;
cout<<"\n Exiting function 1";
}
void function2() throw (int) { //This function calls function 1
cout<<"\n Entering into function 2";
function1();
cout<<"\n Exiting function 2";
}
void function3() { //function to call function2, and handle
exception thrown by function1
cout<<"\n Entering function 3 ";
try {
function2(); //try to execute function 2
}
catch(int i) {
cout<<"\n Caught Exception: "<<i;
}
cout<<"\n Exiting function 3";
}
int main() {
function3();
return 0;
}輸出
Entering function 3 Entering into function 2 Entering into function 1 Caught Exception: 100 Exiting function 3
在這裡,我們可以看到控制元件儲存 function3 的資訊,然後進入 function2,再進入 function1。之後出現一個異常,因此它將堆疊中的所有資訊刪除,然後再次返回 function3。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP