1
A
回答
5
依賴於實現而且未由標準指定。編譯器可以將int &x
視爲一個指針,並在堆棧上爲其留出空間;它可能會掛在CPU寄存器中(因此不需要堆棧空間);它可能會意識到它是現有對象的不同名稱,只是在運行時混淆了這兩個名稱。
下面是幾種情況,作爲編譯器如何使用引用來完成不同事情的示例,具體取決於它的使用方式。
在功能,如:
int foo(int x)
{
int &y = x;
y += 2;
return y + x;
}
像MSVC編譯器將簡單地考慮Y設置爲X —一個別名相同的變量—,靜靜地不同的名稱替換所有提及的ý與X編譯期間。因此,該功能實際上將被編譯,但就好像它是
int foo(int x)
{
x += 2;
return x + x;
}
,如果使用引用作爲參數
int foo(int &x)
{
x += 2;
return x;
}
然後X爲指針,passed into the function on the stack like any other parameter在內部實現。編譯器把它當作好像它是:
int foo(int *x)
{
(*x) += 2;
return *x;
}
的一點是,在回答你的問題取決於不只是你正在使用的編譯器,但也是特定的代碼你寫。它沒有以任何方式被標準規定。
2
引用在引擎蓋下實現爲一個指針是很常見的。安騰C++ ABI指定指針參數:
3.1.2參考參數
參考參數通過將指針傳遞到實際的參數進行處理。
是的,一個引用使用一些內存。如果它的實現實際上是一個指針,那麼它將是指針大小。如何實現引用是實現定義的。
編輯
作爲傑西好從標準的引用,參考是否需要存儲與否是不確定的。
1
傳遞作爲函數參數的引用可能通過傳遞指針來工作。在同一個範圍內聲明對現有變量的引用,就像在你的例子中一樣,可能只是使兩個名字都指向內存中的相同位置。但這是依賴於實現的;不同的編譯器可能會有所不同。
相關問題
- 1. 指針指向參數中的指針C
- 2. C++中的指針賦值原子嗎?
- 3. C - 放棄指針參數
- 4. C++指針參考混淆
- 5. 解釋c指針參數
- 6. C++ - 指針函數參數
- 7. Github - 請參閱快速安裝指南
- 8. 在C#中有像C++一樣的指針嗎?它安全嗎?
- 9. C指針隊列中的指針
- 10. C++中函數指針的指針
- 11. 在C++中爲指針指定指針
- 12. C++參考指針/指針的替代語法
- 13. 在C和C++中,const指針指針指的是什麼?
- 14. C++中的指針分配。 (指針的指針到指針位於LHS)
- 15. 指針vs指針指針C
- 16. C#指針在方法的參數?
- 17. C結構的指針作爲參數
- 18. C指針作爲函數的參數
- 19. C++ - 指向數組的指針 - 指針
- 20. 指向C++指針的指針
- 21. C++中數組指針指針
- 22. C指針指針問題
- 23. C++矢量指針指針
- 24. C指針指針數組
- 25. Memoryleak指針指針,C++
- 26. 指針值C空指針
- 27. 函數指針和指針參數在C
- 28. C++函數輸入參數與指針比較由指針
- 29. 指針參考?
- 30. C指針異常請詳細解釋
我相信這可能會回答'它有空間嗎?':http://stackoverflow.com/questions/1179937/how-does-ac-reference-look-memory-wise - 基本上,實現定義 - 他們可以(最有可能的是)用指針來實現,並且它們可能不需要在堆棧上佔用空間。 – birryree 2012-04-26 03:31:31