2017-08-28 41 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

谢谢!这就说得通了 –

相关问题