Может ли целое число быть NaN в C ++? - PullRequest
26 голосов
/ 16 октября 2010

Можно ли установить int на NaN?Если да, то как я могу проверить, является ли int NaN или нет?

Ответы [ 5 ]

37 голосов
/ 16 октября 2010

Нет, NaN - это значение с плавающей запятой.

Каждое возможное значение int - это число.

Редактировать

Стандарт гласит:

6.2.6.2 40) Некоторые комбинации битов заполнения могут генерировать представления прерываний, например, если один бит заполнения является битом четности.В любом случае, никакая арифметическая операция с допустимыми значениями не может генерировать представление прерывания , кроме как в качестве части исключительного условия, такого как переполнение, и это не может происходить с неподписанными типами. может быть некоторыми недействительными целочисленными значениями для конкретной реализации, но не существует определенного способа их генерации.

5 голосов
/ 16 октября 2010

Обычно (и, в частности, в случае C ++, насколько мне известно): нет .

Целое число NaN

Большинство целочисленных форматов фиксированного размера не имеют возможности явно указать недействительные данные.

1 голос
/ 16 октября 2010

У вас нет конкретного значения int как Nan. Обычно люди используют большое целое число для представления этого значения. Если он без знака int, то обычно используется -1.

1 голос
/ 16 октября 2010

Нет, вы не можете установить int на NaN.

0 голосов
/ 22 июня 2019

Я думаю, что наиболее подходящим API для обработки сбоев является возвращение второго целочисленного кода ошибки в вашем API, например:

int myfunc(args, int* realReturn);

Возвращаемое значение int является кодом ошибки.

Предыдущийвывод передается как указатель в вызывающем коде:

int myInt;
if (myFunc(args, &myInt) != 0) {
//handle error
}
...