[Есть несколько вопросов по этому вопросу, но ни один из ответов не является особенно окончательным, а некоторые устарели от текущего стандарта С++].
Мои исследования показывают, что это основные методы, используемые для проверки того, можно ли преобразовать значение с плавающей запятой в интегральный тип T.
-
if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f)) -
используя
std::fmod, чтобы извлечь остаток и проверить равенство на 0. -
используя
std::remainderи проверим равенство 0.
В первом тесте предполагается, что определен экземпляр из f в экземпляр T. Не верно для std::int64_t до float, например.
С С++ 11, какой из них лучше? Есть ли лучший способ?