c++中強制建議用const替代宏常量,用內聯函數替代宏函數,這是爲何?
一.宏
首先我們來看下宏的優缺點:
優點:增強代碼的複用性,提高性能
缺點:不方便調試(因爲在預編譯階段就進行了替換)
可讀性差,可維護性差,容易誤用。
沒有類型安全的檢測。
例:
#define ADD( a, b ) a + b
void Test ()
{
int a = 2;
int b = 3;
int c = 4;
int ret = ADD( a, b );
cout<<"a + b:" <<ret<< endl;
ret = ADD (a, b) * c ;
cout<<"(a + b) * c:" <<ret<< endl;
}
二.內聯和const
首先我們來看一下內聯的定義:
以inline修飾的函數叫做內聯函數,編譯時C++編譯器會調用內聯函數的地方展開,沒有函數壓棧的開銷,內聯函數提升程序運行的效率。
優點:const和內聯函數在進行編譯時不僅進行替換,而且還會進行參數類型檢測,提高了程序的安全性。內斂函數可以是普通函數,也可以是類的成員函數;函數式宏不能作爲類的成員函數。