C++ 通过指针访问时,NAN是否返回false?

C++ 通过指针访问时,NAN是否返回false?,c++,pointers,nan,math.h,C++,Pointers,Nan,Math.h,我正在编写一个函数,返回一个指向数字数组的指针。为了能够使用指针对数字进行迭代,我将最后一个元素设置为NAN,以标记数组的结尾。 我的循环有点像 for(int* it=ptr;!isnan(*it);++it) //print *it 但它一直在运行,直到崩溃,所以我编写了一些测试代码: int* test = new int[1]; *test = NAN; cout << isnan(NAN) << endl; cout << isna

我正在编写一个函数,返回一个指向数字数组的指针。为了能够使用指针对数字进行迭代,我将最后一个元素设置为
NAN
,以标记数组的结尾。
我的循环有点像

for(int* it=ptr;!isnan(*it);++it)  
//print *it
但它一直在运行,直到崩溃,所以我编写了一些测试代码:

int* test = new int[1];  
*test = NAN;  
cout << isnan(NAN) << endl;  
cout << isnan(*test) << endl;

我已经看到了许多使用
NAN
作为数组中的“塞子”的示例。那为什么不起作用呢

isnan()
仅适用于浮点。

您有未定义的行为,因为您试图将浮点类型的
NAN
转换为
int
,而该值不能用
int
表示

§4.9/1[conf.fpint]浮点数类型的PR值可转换为整数类型的PR值。转换截断;也就是说,小数部分被丢弃。如果目标类型中无法表示截断的值,则该行为是未定义的

由于
NAN
只是浮点数的一个特殊值,因此将其存储在
int
中没有意义。整数类型没有特殊的非数字值。您可以使用一些特定的值来表示数组的结尾,但这不是一个特别令人愉快的解决方案


如果要像这样动态分配数组,则必须通过传递来跟踪数组的大小。对于其他数组(实际上有一些东西表示数组对象本身,而不仅仅是指向其元素的指针),可以使用
std::end
查找它的结尾。但是,像往常一样,我建议改用标准容器。

NAN
是一个特殊的浮点值(对于
float
s/
double
s)-整数类型没有
NAN
。您应该只存储数组的大小,而不是使用一些sentinel值。s/'stopper'/sentinel.IIRC实现定义
int
是否可以有
NAN
值。我希望老克雷人能支持我。
1
0