【发布时间】:2012-06-19 20:18:30
【问题描述】:
根据 C++ ISO 规范,§26.2/2:
为
float、double或long double以外的任何类型实例化模板complex的效果未指定。
为什么标准作者会明确添加此限制?这使得它未指定,例如,如果您制作 complex<int> 或 complex<MyCustomFixedPointType> 会发生什么,并且似乎是人为的限制。
这种限制有什么原因吗?如果您想使用自己的自定义类型实例化 complex,是否有解决方法?
我之所以问这个问题主要是因为 this earlier question,其中 OP 对为什么 abs 为 complex<int> 提供奇怪的输出感到困惑。也就是说,这仍然不太有意义,因为我们还可能希望将 complex 数字从定点类型、更高精度的实数等中提取出来。
【问题讨论】:
-
看到你之前的回答我不禁笑了,但这确实是个好问题。
-
@chris- 在无法给出高层次理由的情况下给出这个答案我感觉很糟糕。我通常很擅长说“由于 X、Y 和 Z 的原因,这是 C++ 的一个奇怪的边缘案例”,但这次我不知道发生了什么。
-
“标准化复合体
已经在委员会上断断续续地讨论了十多年,至少有一个供应商对此表示强烈反对。” lists.cs.uiuc.edu/pipermail/cfe-dev/2012-March/020398.html -
@HristoIliev- 为任意类型实现
complex困难这一事实并不一定意味着它应该不可能所以。 C++ 规范可能已经定义了一组新的特征(类似于容器要求或分配器要求)说“如果您可以实现以下内容,那么您可以存储在complex中。” -
“未指定”与“未定义”或“格式错误”不同。未指定,在标准中,意味着“这可能是合法的,但标准并不要求它,你需要检查你的编译器文档,看看它在你的实际实现中是否允许。”
标签: c++ math language-design complex-numbers