【发布时间】:2015-12-04 09:35:09
【问题描述】:
我在看this question on isocpp FAQ here,这个问题是解释如何写???的返回类型
template<class T, class U>
??? mul(T x, U y)
{
return x*y;
}
我知道最简单的方法是写auto mul(T x, U y) -> decltype(x*y),但是问题还提供了另一种方法,即用decltype(*(T*)(0)**(U*)(0)) 替换???。但我不完全明白这个decltype(*(T*)(0)**(U*)(0)) 到底在做什么,它似乎是在声明一个临时指针T* 并将其初始化为零然后取消引用该指针,然后乘以与U 类型相同的对应项,我的理解对吗?
但是为什么要使用指针呢?我认为decltype(T(0)*U(0)) 或decltype(T{0}*U{0}) 也应该可以。
【问题讨论】:
-
假设
T和U有一个构造函数,它接受一个整数参数。指针方式不对T和U的构造函数做任何假设。 -
注意,它不是未定义的行为,因为它是in an unevaluated context