![](/img/trans.png)
[英]Is casting a C++ reference from unsigned char to double& safe?
[英]double& (not passing by reference) C++
typedef double real8;
typedef real8 Real_t;
Real_t& x(int y);
什么是Real_t&
?? 我只看到一個數據類型后跟“&”表示通過引用傳遞。 但這是在申報行中。 這是什么意思 ?
這意味着該函數返回對Real_t
的引用,該實際上是一個double
。 Real_t
是一個real8
,如果您解析所有typedef,它是一個double
。
你在這應該小心。 如果未通過函數結尾的范圍檢索通過引用傳遞的結果,那么您將有一個懸空引用。
例如:
int& foo() {
int x = 8;
return x;
}
int main() {
int y = foo();
}
main中的變量y
最終引用一個變量,當foo()
返回時,該變量在超出范圍時被銷毀,因此使用它是未定義的行為 。 如果x
是從單例或者函數foo()
范圍之外的東西中檢索到的,那么它仍然存在,這樣就可以了。
人們有時會在編譯單元之間以確定的方式返回對初始化靜態全局變量的引用,因此您可能會看到這與靜態一起使用,如:
MyClass& MyStaticVar() {
static MyClass instance;
return instance;
}
哪個也沒關系,因為初始化后程序的持續時間是靜態的。
這意味着x
是一個返回對Real_t
的引用的Real_t
。
通過引用返回的示例是用於類中的數據訪問。 例如, std :: vector :: at()返回對向量元素的引用。
對於安全返回引用的自由函數,函數內部必須存在不明顯的內容,以確保不返回懸空引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.