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