Namespaces
Variants

std:: isunordered

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
isunordered
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
定义于头文件 <cmath>
(1)
bool isunordered ( float x, float y ) ;

bool isunordered ( double x, double y ) ;

bool isunordered ( long double x, long double y ) ;
(C++11 起)
(C++23 前)
constexpr bool isunordered ( /* 浮点类型 */ x,
/* 浮点类型 */ y ) ;
(C++23 起)
定义于头文件 <cmath>
template < class Arithmetic1, class Arithmetic2 >
bool isunordered ( Arithmetic1 x, Arithmetic2 y ) ;
(A) (C++11 起)
(C++23 起为 constexpr)
1) 判断浮点数 x y 是否无序,即其中一个或两个为 NaN,因此无法进行有意义的比较。 该库为所有无 cv 限定的浮点类型提供了参数 x y 类型的重载。 (since C++23)
A) 为所有其他算术类型组合提供了额外的重载。

目录

参数

x, y - 浮点数或整数值

返回值

如果 x y 中有一个是 NaN,则为 true ,否则为 false

注释

额外的重载并不需要完全按照 (A) 的形式提供。只需确保对于它们的第一个参数 num1 和第二个参数 num2 满足以下条件:

  • num1 num2 具有类型 long double ,则 std :: isunordered ( num1, num2 ) std :: isunordered ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    效果相同。
  • 否则,若 num1 和/或 num2 具有类型 double 或整数类型,则 std :: isunordered ( num1, num2 ) std :: isunordered ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    效果相同。
  • 否则,若 num1 num2 具有类型 float ,则 std :: isunordered ( num1, num2 ) std :: isunordered ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    效果相同。
(C++23 前)

num1 num2 具有算术类型,则 std :: isunordered ( num1, num2 ) std :: isunordered ( static_cast < /*common-floating-point-type*/ > ( num1 ) ,
static_cast < /*common-floating-point-type*/ > ( num2 ) )
效果相同,其中 /*common-floating-point-type*/ num1 num2 类型之间具有最高 浮点转换等级 和最高 浮点转换子等级 的浮点类型,整数类型的实参被认为具有与 double 相同的浮点转换等级。

若不存在具有最高等级和子等级的此类浮点类型,则 重载决议 不会从提供的重载中得到可用候选。

(C++23 起)

示例

#include <cmath>
#include <iostream>
#define SHOW_UNORDERED(x, y) \
    std::cout << std::boolalpha << "isunordered(" \
              << #x << ", " << #y << "): " \
              << std::isunordered(x, y) << '\n'
int main()
{
    SHOW_UNORDERED(10, 01);
    SHOW_UNORDERED(INFINITY, NAN);
    SHOW_UNORDERED(INFINITY, INFINITY);
    SHOW_UNORDERED(NAN, NAN);
}

输出:

isunordered(10, 01): false
isunordered(INFINITY, NAN): true
isunordered(INFINITY, INFINITY): false
isunordered(NAN, NAN): true

参见

(C++11)
对给定的浮点数值进行分类
(函数)
(C++11)
检查给定数值是否为 NaN
(函数)
C 文档 关于 isunordered