2017-08-28 91 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; 
} 

因此,你會做指針運算,然後解引用指針在你沒有分配,這恰好遞增23個地址過去a模板。

它在本質上是因爲如果你叫

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

謝謝!這就說得通了 –

相關問題