2016-05-14 42 views
-1

爲什麼下面的代碼有效? 函數max正在返回一個向量副本的引用,它是局部變量,但它返回19(這是正確的答案)。 我用QtCreator 3.5.0爲什麼在這段代碼中引用局部變量返回?

#include <iostream> 
#include <vector> 

template <class T> 
T& max(std::vector<T> array) 
{ 
    T& result = array[0]; 
    for (size_t i = 1; i < array.size(); i++) 
    { 
     if (result < array[i]) 
     { 
      result = array[i]; 
     } 
    } 
    return result; 
} 

int main() 
{ 
    std::vector<int> testVector; 
    for (size_t i = 0; i < 20; i++) 
    { 
     testVector.push_back(i); 
    } 
    std::cout << max(testVector) << std::endl; 
} 
+3

你只是幸運 - 不要依賴它 –

+2

如果違反規定,你可能會入獄或者你可能不會。只是不這樣做 – user463035818

+0

@ hvd是的,對不起,我想說,它沒有返回一個矢量副本的參考。 – perencia

回答

2

返回到本地變量的引用有一個未定義的行爲。它可能會偶然爲你的用例工作,但你不應該依賴它。它可能(也可能會)最終以某種可怕的方式破裂。

相關問題