2017-08-28 29 views
-6

誰かが私にランダムな結果をもたらす理由を教えてもらえますか?なぜこのテンプレートにランダムな結果がありますか?

template<class T, class U> 
T f(T x, U y) 
{ 
    return x+y; 
} 
int f(int x, int y) 
{ 
    return x-y; 
} 
int main() 
{ 
    int *a=new int(3), b(23); 
    cout<<*f(a,b); 
    return 0; 
} 

b(23)とは何ですか?大いに感謝する !

+2

何「ランダムな結果」と呼ばれるのだかのように、本質的ですか? – AnT

+5

'*(new int(23)+ 23)'は本当にUBです。 – Jarod42

+0

毎回異なる結果になる –

答えて

4

int* f(int* x, int y) 
{ 
    return x + y; 
} 

は、したがって、あなたが、その後 a過去23のアドレスをインクリメントすることを起こるあなたが割り当てなかったポインタを、逆参照、ポインタ演算を行うことになりますでしょうインスタンス化されたテンプレート。

それはあなたが話している

*(new int(23) + 23); 
+0

ありがとう!それは理にかなっている –

関連する問題