2012-08-06 103 views
1
typedef double real8; 

typedef real8 Real_t; 

Real_t& x(int y); 

什麼是Real_t&?我只看到一個數據類型,後面跟着「&」來表示按引用傳遞。 但是這是在申報行中。這是什麼意思 ?double&(not pass by reference)C++

+0

這意味着通過引用。 – 2012-08-06 18:29:08

+0

這個**是一個聲明行。它聲明'x'。 – 2012-08-06 18:33:14

回答

7

這意味着該函數返回對Real_t的引用,它實際上是doubleReal_treal8,如果您解決所有類型定義,則這是double

你應該在這裏小心。如果通過引用傳遞的結果不是從存在於該函數末尾的作用域中檢索的,那麼您將有一個懸掛引用。

例如:

int& foo() { 
    int x = 8; 
    return x; 
} 

int main() { 
    int y = foo(); 
} 

可變,y,在主最終參考,因爲它出去的範圍時foo()返回哪個已被破壞的變量,因此使用它是未定義的行爲 。如果x已從單身人士或超出功能foo()範圍之外的東西中找到,那麼它仍然存在,但這樣可以。

人們有時會返回引用在編譯單元之間以確定的方式來初始化靜態全局變量,所以你可能會看到這個使用像靜:

MyClass& MyStaticVar() { 
    static MyClass instance; 
    return instance; 
} 

這也沒關係,因爲靜態生活的持續時間初始化後的程序。

7

這意味着x是一個函數,它返回對Real_t的引用。

通過引用返回的示例是類中的數據訪問。例如,std::vector::at()返回對矢量元素的引用。

對於一個免費的函數來安全地返回一個引用,函數內部必須有一些不明顯的事情來確保不會返回一個懸掛引用。