從C到C++(內聯函數-異常處理)

10.對於不包含循環的簡單函數,建議用 inline關鍵字 聲明 爲"inline內聯函數",
編譯器將內聯函數調用用其代碼展開,稱爲“內聯展開”
內聯函數的作用:在函數調用的時候,會直接用內聯函數裏的代碼替換掉函數調用,從而避免函數調用開銷(在函數調用時會進行參數間的值傳遞,效率不高,而用內聯函數則不會進行函數調用,直接進行裏面的程序代碼,但只適用於簡單的函數),提高程序執行效率
(確實會提高效率,尤其是編寫大型系統時)

#include <iostream> 
#include <cmath> 
using namespace std;

inline double distance(double a, double b) //說明爲內聯函數 
{
	return sqrt(a * a + b * b);
}

int main() 
{
	double k = 6, m = 9;
	// 下面2行將產生同樣的代碼:
	cout << distance(k, m) << endl;
	cout << sqrt(k * k + m * m) << endl;

	return 0;
}

注意:使用了內聯函數,編譯器不一定會將其內聯展開用代碼替換掉,編譯器將根據內聯函數的代碼情況進行展開,比如內聯函數中有循環語句或者代碼較多,編譯器可能就不會進行內聯展開

  1. 通過 try-catch處理異常情況
    正常代碼放在try塊,catch中捕獲try塊拋出的異常
    一個程序運行的時候可能學出錯,在c++中將整
    try:拋出異常 catch:捕獲異常
    (不好理解,代碼多了會比較亂,基本不用。。。)
#include <iostream> 
#include <cmath> 
using namespace std;

int main ()
{
   int a, b;

   cout << "Type a number: ";
   cin >> a;
   cout << endl;

   try 
   {
      if (a > 100) throw 100;
      if (a < 10)  throw 10;       //拋出 
      throw "hello";
   }
   catch (int result)
   {
      cout << "Result is: " << result << endl;
      b = result + 1;
      
   }
   catch (char * s)
   {
	   cout << "haha " << s << endl;
   }

   cout << "b contains: " << b << endl;

   cout << endl;

   // another example of exception use:

   char zero[] = "zero";
   char pair[] = "pair";
   char notprime[] = "not prime";
   char prime[] = "prime";

   try 
   {
      if (a == 0) throw zero;
      if ((a / 2) * 2 == a) throw pair;
      for (int i = 3; i <= sqrt (a); i++)
	  {
         if ((a / i) * i == a) throw notprime;
      }
      throw prime;
   }
   catch (char *conclusion) 
   {
	   cout << "異常結果是: " << conclusion << endl;
   }
   catch (...) 
   {
	   cout << "其他異常情況都在這裏捕獲 " << endl;
   }

   cout << endl;

   return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章