內聯函數和宏的區別:
1.內聯函數在運行時可調試,而宏定義不可以;
2.編譯器會對內聯函數的參數類型做安全檢查或自動類型轉換(同普通函數),而宏定義則不會;
3.內聯函數可以訪問類的成員變量,宏定義則不能;
4.在類中聲明同時定義的成員函數,自動轉化爲內聯函數。
------------------------------------------------------------------------------------------------
指針和引用的區別:
指針其實也是一種值傳遞,不過它傳的是地址而已,引用傳遞是傳入棧中偏移
這可以從反彙編後看出來
指針是把變量的地址入堆棧,函數開始出棧後,只能改變指針改向的地址處的內容,而不能改變指針的值!!
而引用傳遞壓入的是偏移,在函數開始出棧後直接將棧+偏移來操作傳入參數,所以引用使用的是同一個對象,不需要額外產生對象的拷貝,提高了效率。
引用:變量的別名;不分配內存空間;定義時必須同時初始化;一旦初始化後其值不能改變;
指針:是一個變量;分配內存空間;定義時可以不必初始化;