На этот вопрос уже был дан ответ здесь:
Почему C++ предписывает этот комплекс может быть создан только для float, double или long double?
Тем не менее, я не вижу, как ответ там действителен. Принятая причина заключается в том, что:
Вы не можете правильно реализовать многие операции std::complex над целыми числами. Например.,
шаблон T abs(const комплекс &z);
для комплекса не может быть T = длинное возвращаемое значение...
Однако я не вижу причин, почему бы и нет.
Например, если у меня есть 1234567 + 7654321i
, то abs() составляет около 7753243,557. Целочисленный результат, такой как 7753243 или 7753244, может быть очень полезным. Неважно, какой результат дан, пока механизм непротиворечив. (Точно так же, как мы принимаем 5 / 3 = 1).
Может ли кто-нибудь предложить какие-либо идеи относительно того, почему комплексные целые числа недоступны?
abs(std::complex<int>(3, 5))
. В любом случае вам достаточно просто написать собственный класс для реализации всего, что вы хотите сделать. - person M.M   schedule 06.11.2014