引用很多人知道,但去不常用。個人認(rèn)為廣泛使用,因?yàn)樗梢越o我們帶來許多好處。
例一:函數(shù)參數(shù)使用引用
void f(Class_A const & a_object);
這是引用最常用到地方。以前C中是使用指針,但指針有很多弊端。
其一就是可能傳入零指針,這給寫函數(shù)的帶來了很大的負(fù)擔(dān)(因?yàn)樗紤]這種錯誤使用,而大家都知道異常處理是最復(fù)雜難纏的了)。
其二就是它給使用者帶來很多不便,每次都要&對象。
引用其實(shí)就是指針,但它比一般指針更安全,因?yàn)樗粫淖兯福膊粫裁炊疾灰茫辉倬褪撬纫话阒羔樃烙^。
例二:在類定義中成員使用引用。
class MyClass {
Class_B & i_object;
public:
MyClass(Class_B & a_init) :i_object(a_init) {
...}
...
};
這里類成員使用了引用類型,這個整個類的設(shè)計(jì)帶來了便利,減少了異常處理的開銷(人和機(jī)器都省了)。
如果使用指針的話,每個MyClass的成員函數(shù)都要在使用 i_object時考慮空指針的情況。
例三:在一個內(nèi)嵌域中引入別名。
C++中類型別名用typedef,對象的別名就是用 引用來實(shí)現(xiàn)。
namespace A_interface
{
int & goodbit=B_namespace::i_well;
}
void f(...)
{
std::cout<<A_interface::goodbit;
}
很多人對這別名機(jī)制不屑一顧,其實(shí)別名是很有用,因?yàn)樗峁┝碎g接機(jī)制,讓程序的部件間依賴更小更集中。不要以為別名會帶來效率的損失,很多時候這些都會被編譯器優(yōu)化掉(也就是別名只是為了給人看的)。