有时需要获取NaN
值(例如,从函数中将其作为错误值返回)。 С++ 11提供了double nan(const char* tagp);
函数来获取NaN
参见doc。此函数获取C字符串参数tagp
,其中:
库实现可以使用来区分不同的NaN 值以实现特定的方式。如果这是一个空字符串(“”),则该函数返回通用NaN值
我想更深入地了解此功能。有人可以详细解释
tagp
值?在哪里可以找到可能的值列表?tagp
参数错误或编译器不支持怎么办?答案 0 :(得分:2)
С++ 11提供了
double nan(const char* tagp);
一些C章和经文(C17§7.12.11.2)
说明
2nan
,nanf
和nanl
函数根据以下规则转换tagp
指向的字符串。呼叫nan("n-char-sequence")
等效于strtod("NAN(n-char-sequence)", (char**)NULL);
,呼叫nan("")
等效于strtod("NAN()"
,(char**)NULL)
。如果tagp
没有指向n字符序列或空字符串,则调用等效于strtod("NAN",(char**)NULL)
。 ...退货
3nan
函数返回一个安静的NaN(如果可用),其内容通过tagp
指示。如果实现不支持静默NaNs
,则函数返回零。
tagp
指向一个0-9,A-Z,a-z和_字符的序列。
tagp
参数,会发生什么情况?如果C / C ++规范不支持,则“该调用等效于strtod("NAN",(char**)NULL)
”。这会导致实现定义的结果。
是的,可以安全地避免出现未定义的行为。但是,含义和派生的NAN是特定于实现的。
将 n-char-sequence 解释为NAN有效载荷的十进制表示形式是可能的结果,但受上述限制。