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。

更新時間:30-Jul-2019

1K+ 瀏覽

啟動你的 事業

透過完成課程獲得認證

開始
廣告
© . All rights reserved.