首先我們來看一個例子:
#include <iostream>
using namespace std;
const int &fun1(int a,int b)
{
int i=0;
i = a + b;
return i;
}
int main()
{
if (fun1(1, 2) == fun1(2, 5))
{
cout << fun1(1, 2) << endl;
cout << fun1(2, 5) << endl;
cout << "sb" << endl;
}
else
cout << "bushisb" << endl;
}

請看為什麼if語句裡面的條件為真呢?這裡我可以告訴大家,不管當傳遞給a b的值如何變化,if語句永遠為真,當時輸出值為什麼不相等呢?
分析:函數fun1傳回的是局部對象引用,這個對象函數推出前local對象i已經被銷毀,其傳回的引用永遠指向一個過時的i。是以if語句裡面的條件永遠為真。
再來看一個列子:
class A{ };
const A operator*(const c A& a1,const A& a2);
這個operator*是以by value 傳回方式傳回其計算結果,有人想改為傳遞reference方式已達到不需要付出任何代價去傳值:
const A& operator*(const c A& a1,const A& a2);
分析:記住,所謂reference隻是個名稱,代表某個既有的對象,任何時候看到一個reference聲明的方式,你都應該立刻問自己,它的另外一個名稱是什麼?因為它是一定是某物的另一個名稱。如果他傳回一個引用,那麼傳回一個指向某個既有的對象.
A a(1,2);