引用型別也稱別名,它是個很有趣的東西。在c++ 下你可以把它看作是另外的一種指標,通過引用型別我們同樣也可以間接的操作物件,引用型別主要是用在函式的形式引數上,通常我們使用它是把類物件傳遞給乙個函式。 引用物件採用型別名加上&符號和名稱的方式進行定義。例如:(int &s;),這裡我們就定義了乙個int型別的名為s 的引用,但是int &s;這樣的方式是不能夠被編譯成功的,因為引用的定義必須同時給應用進行賦值操作,這裡的賦值並不是說把變數的值傳遞給引用,而是把引用指向變數,寫成這樣就對了:(int &s=變數名;)。
#include using namespace std;
void main(void)
{
int a=10;
int &s=a;
s=s+2;
cout << &a << "|" << &s << "|" << a << "|" <
#include using namespace std;
void main(void)
{ int a=10;
//double &s = a + 1.2f; //這句就是錯誤的!
const double &s = a + 1.2f;
cout << &a << "|" << &s << "|" << a << "|" <
上面的**足夠說明問題了,這就是const修飾帶來的好處,但是聰明的人會在輸出的時候發現乙個問題,就是a和s的值的輸出不同,按照最先說的道理應該可以改變a的值呀,為什麼在這裡卻有沒有能夠改變呢?
道理是這樣的,const修飾過後的引用在編譯器內****進行變化的。
int a=10;
const
double &s= a + 1.2f;
這樣的一段**在編譯器認為卻是下面的方式進行的
int a=10;
int temp = a;
const
double &s = temp + 12.f
這裡其實是把a的值賦給了乙個臨時temp 變數,而後test獲得的卻是temp+12.f 改變的是temp而不是a,所以就出現了a和s顯示的值不同的情況,這裡要特別注意,這是乙個很容易混淆的地方,在編寫程式的時候要特別仔細,以免出現了問題卻檢查不出為什麼!
C 值型別與引用型別(下)
5.2 將值型別盡可能實現為具有常量性和原子性的型別 具有常量性的型別很簡單 如果構造的時候驗證了引數的有效性,之後就一直有效 省去了許多錯誤檢查,因為禁止更改 確保執行緒安全,因為多個reader 訪問到同樣的內容 可以安全地暴露給外界,因為呼叫者不能更改物件的內部狀態。具有原子性的型別都是單一的...
C 引用型別
1 靜態記憶體和動態記憶體分別對應棧記憶體和堆記憶體嗎?那麼值型別和引用型別的記憶體分配是怎樣的?堆記憶體就是 執行時動態分配的記憶體。執行期完成 上靜態分配記憶體。引用型別的物件總是在程序堆中動態分配記憶體。對於值型別,如果某個類的例項有個值型別的字段,例如類的成員變數是值型別的,但是類 是引用型...
C 型別基礎 引用型別
上一講說了一下值型別的部分內容,雖然沒有什麼有意思的東西能吸引大家的注意 也沒啥好的 讓大家參考一下 但是樓主的水平實在有限 各位看官如果不嫌棄的話 還是看看吧 如果對你的生活或者學習有那麼一絲幫助的話 都算是樓主的萬幸 當宣告乙個引用型別變數,並使用new 操作符建立引用型別實力的時候 該引用型別...