Можно ли установить int
в NaN
? Если да, то как я могу проверить, есть ли int
NaN
или нет?
Может ли целое число быть NaN в С++?
Ответ 1
Нет, NaN - значение с плавающей запятой.
Каждое возможное значение int
- это число.
Изменить
В стандарте говорится:
6.2.6.2 40). Некоторые комбинации битов дополнения могут генерировать ловушку представления, например, если один бит заполнения - бит четности. Несмотря на это, никакая арифметическая операция на допустимые значения могут генерировать ловушку представительство, не являющееся частью исключительное условие, такое как переполнение, и это не может произойти с неподписанные типы.
Таким образом, могут существовать определенные недопустимые значения целочисленной реализации, но нет определенного способа их генерации.
Ответ 2
Обычно (и, в частности, в случае C++, насколько мне известно): нет.
Целое число NaN
Большинство целочисленных форматов фиксированного размера не имеют возможности явно указать недопустимые данные.
Ответ 3
Нет, вы не можете установить int
в NaN.
Ответ 4
У вас нет какой-либо конкретной стоимости int как Nan. Что обычно делают люди, так это использование большого целого числа для представления этого значения. ЕСЛИ он без знака int, тогда его обычно используют -1.
Ответ 5
Я думаю, что наиболее подходящим API для обработки сбоев является возвращение второго целочисленного кода ошибки в вашем API, например:
int myfunc(args, int* realReturn);
Возвращаемое значение int является кодом ошибки.
Предыдущий вывод передается как указатель в вызывающем коде:
int myInt;
if (myFunc(args, &myInt) != 0) {
//handle error
}