在 C++ 的任何運算式當中,都有包含所謂左值(lvalue)以及右值(rvalue),在解釋之前先看以下程式碼:
在這個範例中42069
是右值(專業術語是 literal constant)、變數 x
是左值,最直接的差別就是,右值我們沒有明確的定義其記憶體位置,而左邊的變數 x
是有記憶體位址的。
而在這邊的程式碼中,&
是一個取址運算元,它接收一個變數(左值)即可產生其變數的記憶體位址(右值),並最後 assgin 給指標 p
,所以它也是一個左值,因為它也有自己的記憶體位置。
你不可能這樣寫:
參考只能參考左值,這其實很合理因為右值本身就是暫時的值,它隨時都可能被釋放,而且也沒有具體的記憶體位址,你參考右值是很奇怪的。但是如果你多加個 const
的話,就可以參考右值了,看以下範例:
參考只能接受左值,如果要接收右值,就必須是 const 才能去參考右值,為甚麼呢?可以這樣思考:右值是程式臨時產生出來的值,不可以被修改,所以說必須加上修飾詞 const 才可以去參考右值。
C++