operator==,!=,<,<=,>,>=,<=>(std::filesystem::path)

来自cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
friend bool operator==( const path& lhs, const path& rhs ) noexcept;
(1) (C++17 起)
friend bool operator!=( const path& lhs, const path& rhs ) noexcept;
(2) (C++17 起)
(C++20 前)
friend bool operator<( const path& lhs, const path& rhs ) noexcept;
(3) (C++17 起)
(C++20 前)
friend bool operator<=( const path& lhs, const path& rhs ) noexcept;
(4) (C++17 起)
(C++20 前)
friend bool operator>( const path& lhs, const path& rhs ) noexcept;
(5) (C++17 起)
(C++20 前)
friend bool operator>=( const path& lhs, const path& rhs ) noexcept;
(6) (C++17 起)
(C++20 前)
friend std::strong_ordering
    operator<=>( const path& lhs, const path& rhs ) noexcept;
(7) (C++20 起)

以字典序比较二个path

1) 检查 lhsrhs 是否相等。等价于 !(lhs < rhs) && !(rhs < lhs)
2) 检查 lhsrhs 是否不相等,等价于 !(lhs == rhs)
3) 检查 lhs 是否小于 rhs 。等价于 lhs.compare(rhs) < 0
4) 检查 lhs 是否小于或等于 rhs 。等价于 !(rhs < lhs)
5) 检查 lhs 是否大于 rhs 。等价于 rhs < lhs
6) 检查 lhs 是否大于或等于 rhs 。等价于 !(lhs < rhs)
7) 获得 lhsrhs 的三路比较结果。等价于 lhs.compare(rhs) <=> 0

这些函数对通常无限定有限定查找不可见,而只能在 std::filesystem::path 为参数的关联类时由实参依赖查找找到。这阻止 using namespace std::filesystem; using 指令存在的情况下的不想要的转换。

<<=>>=!= 运算符分别从 operator<=>operator== 合成

(C++20 起)

参数

lhs, rhs - 要比较的路径

返回值

1-6) 若对应比较关系成立则返回 true ,否则返回 false
7)lhs 小于 rhs 则为 std::strong_ordering::less ,否则若 rhs 小于 lhs 则为 std::strong_ordering::greater ,否则为 std::string_ordering::equal

注解

路径相等与等价有不同语义。

相等情况下,以 operator== 确定,只比较字典表示。从而 path("a") == path("b") 决不可能为 true

等价情况下,以 std::filesystem::equivalent() 确定,检查二个路径是否解析到同一文件系统对象。从而若路径解析到同一文件,则 equivalent("a", "b") 将返回 true

示例

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
LWG 3065 C++17 允许 using 指令存在的情况下比较任何能转换成 path 的类型 使之为隐藏的友元

参阅

以字典序比较二个路径的字典表示
(公开成员函数)
检查两个路径是否指代同一文件系统对象
(函数)