引用很多人知道,但去不常用。個人認為廣泛使用,因為它可以給我們帶來許多好處。
例一:函數參數使用引用
void f(Class_A const & a_object);
這是引用最常用到地方。以前C中是使用指針,但指針有很多弊端。
其一就是可能傳入零指針,這給寫函數的帶來了很大的負擔(因為他要考慮這種錯誤使用,而大家都知道異常處理是最復雜難纏的了)。
其二就是它給使用者帶來很多不便,每次都要&對象。
引用其實就是指針,但它比一般指針更安全,因為它不會改變所指,也不會什么都不引用;再就是它比一般指針更美觀。
例二:在類定義中成員使用引用。
class MyClass {
Class_B & i_object;
public:
MyClass(Class_B & a_init) :i_object(a_init) {
...}
...
};
這里類成員使用了引用類型,這個整個類的設計帶來了便利,減少了異常處理的開銷(人和機器都省了)。
如果使用指針的話,每個MyClass的成員函數都要在使用 i_object時考慮空指針的情況。
例三:在一個內嵌域中引入別名。
C++中類型別名用typedef,對象的別名就是用 引用來實現。
namespace A_interface
{
int & goodbit=B_namespace::i_well;
}
void f(...)
{
std::cout<<A_interface::goodbit;
}
很多人對這別名機制不屑一顧,其實別名是很有用,因為它提供了間接機制,讓程序的部件間依賴更小更集中。不要以為別名會帶來效率的損失,很多時候這些都會被編譯器優化掉(也就是別名只是為了給人看的)。