2016-05-14 8 views
-1

次のコードはなぜ機能しますか? 関数maxは、ローカル変数であるvectorのコピーへの参照を返していますが、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

を使用してい は未定義の動作を持っています。あなたのユースケースのために偶然に働くかもしれませんが、あなたはそれに頼るべきではありません。それは最終的に恐ろしい方法で壊れるかもしれません。

関連する問題