相关疑难解决方法(0)

NaN对Bool的转换:对还是错?

C++规范的哪一部分或IEEE浮点规范声明NaN值应转换true为false而不是false?

如果我查看C++标准部分4.12布尔转换它说:

零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.

现在IEEE浮动说NaN将false与任何其他值进行比较.因此,NaN是真还是假取决于你如何进行比较(下图).因此,我认为必须明确提及.

value == 0 ? false : true
value != 0 ? true : false
Run Code Online (Sandbox Code Playgroud)

现在,转换为整数怎么样?下面的简短程序显示转换为整数的变量NAN产生最小整数,而常量转换为0(使用GCC).这看起来很奇怪.

#include <iostream>
#include <cmath>

void write( double r, int i, bool b )
{
    std::cout << r << " == " <<  i << " == " << (b ? "True" : "False") << std::endl;
}

int main()
{
    double value = NAN;
    write( value, value, value );
    write( NAN, NAN, NAN );
}
Run Code Online (Sandbox Code Playgroud)

输出:

nan …
Run Code Online (Sandbox Code Playgroud)

c c++ language-lawyer

17
推荐指数
1
解决办法
3191
查看次数

标签 统计

c ×1

c++ ×1

language-lawyer ×1