这个问题已经在这里得到了回答:
为什么C++强制要求该复合体只能实例化为float、double或long double?
然而,我看不出那里的答案是如何有效的。公认的原因是:
您无法正确实现上的许多std::复杂操作整数。例如,
模板T abs(const complex&z);
对于综合体不能有T=长返回值。。。
然而,我看不出有什么理由不这样做。
例如,如果我有1234567 + 7654321i
,那么abs()大约是7753243.557。诸如7753243或7753244之类的整数结果可能非常有用。给出哪种结果并不重要,只要机制是一致的。(就像我们接受5/3=1一样)。
有人能提供一些关于为什么复数整数不可用的想法吗?
在数学术语中,复数的绝对值是其分量平方和的平方根。这意味着只有在非常罕见的情况下,如3 + 4i
,绝对值才会是整数(本例为5
)。如果您希望绝对值与模板参数的类型相同,那么您就是SOL。