Я испытываю затруднения при обертывании моей головы вокруг лямбда-выражений, потому что я работаю в Visual FoxPro, который имеет Макроподстановку и ExecScript {}, и Оцените () функции, которые, кажется, служат почти такой же цели.
? Calculator(10, 23, "a + b")
? Calculator(10, 23, "a - b");
FUNCTION Calculator(a, b, op)
RETURN Evaluate(op)
Одно определенное преимущество для использования формальных лямбд (я принимаю), время компиляции, проверяя: Fox не будет знать, если Вы опечатка текстовая строка выше, пока это не попытается выполнить его.
Это также полезно для управляемого данными кода: можно сохранить все стандартные программы в полях записки в базе данных и затем просто оценить их во времени выполнения. Это позволяет Вам настроить часть приложения, на самом деле не имея доступа к источнику. (Но это - другая тема в целом.)
Вы ищете актуальную бесконечность или минимальное конечное значение? В первом случае используйте
-numeric_limits<double>::infinity()
, который работает, только если
numeric_limits<double>::has_infinity
В противном случае вы должны использовать
numeric_limits<double>::lowest()
, который был введен в C ++ 11.
Если low ()
недоступен, вы может вернуться к
-numeric_limits<double>::max()
, который может отличаться от low ()
в принципе, но обычно не работает на практике.
Попробуйте следующее:
-1 * numeric_limits<double>::max()
Ссылка: numeric_limits
Этот класс специализирован для каждого из основные типы, с его члены возвращаются или устанавливаются в различные значения, которые определяют свойства этого типа в конкретная платформа, на которой компилируется.
Плавающий номера точек (IEEE 754) симметричны, поэтому, если вы можете представить наибольшее значение ( DBL_MAX
или numeric_limits
), просто добавьте знак минус.
А затем отличный способ:
double f;
(*((long long*)&f))= ~(1LL<<52);