Я должен хранить одно двойное значение, кэшированное. После его использования он должен быть недействительным. Две альтернативыC/C++ NaN или boolean?
Одним из них является добавление булевого флага, true
, когда кешированное значение является хорошим, когда оно используется, установите его в false
, а когда флаг будет ложным, пересчитайте и пополните.
Второй интереснее - я мог бы сохранить его как двойное значение и использовать NaN как недействительный/необходимость в флагом recalc.
double get() const {
if (!isnan(_value)) {
double t = _value;
_value = std::numeric_limits<double>::quiet_NaN;
return t;
}
}
Любые возражения против него? Любые мысли об эффективности?
Это вопрос C или C++ вопрос? Ответы совершенно разные для двух языков. –
Ключевой вопрос: есть ли NaN разумное значение для установки кеша? Это всегда ключевая проблема с использованием значений флагов - если значение всегда может быть установлено на флаг во время нормальной работы, у вас будет реальная ошибка, связанная с ошибкой. –
Имея флаг состояния, вы можете выйти за пределы «действительных» и «недопустимых» значений, таких как «внутреннее значение по умолчанию», «системное значение по умолчанию», «пользовательская настройка по умолчанию», «значение переопределения оператора» и т. Д. и т. д. – wallyk