2014-05-18 75 views

回答

10

通過較短的引用將長表達式替換爲對象並使其更具可讀性很有用。例如:

const int &SphereRadius = Configuration::getInstance()->sphere->radius; 

只要配置同時發生變化(例如在另一個線程中),就會更新您的引用。

您顯示的代碼只是一個更簡單的工具的可能性。你在許多情況下的例子是沒有意義的,因爲你以前就明白過。這些引用的主要目標是混淆一個對象。

  • 通過引用一個函數來傳遞對象,並且能夠在不混淆指針的情況下修改引用對象。

  • 在基於範圍的循環中使用它們來修改容器中的迭代項目。

  • 在某些情況下用簡單的縮短表達式。和更多... 。

5

您不能綁定一個非const引用到右值,即不能「是指」到不能出現的東西在賦值運算符的左側(如臨時對象)。主要原因是當temp被破壞時,最終會出現懸掛引用,而C++不允許這樣做。你的代碼不會編譯。

滑稽但是,你可以一個臨時綁定到const引用,這將延長臨時的一生,即

const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now 

但是暫時不被破壞。請參閱Does a const reference prolong the life of a temporary? 但是,我不會在我的代碼中使用它,它只是我們大多數人的混淆之源。