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