Spec-Zone.ru › C++

operator==,!=,<,<=,>,>=, <=>(std::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)

Сравнивает два пути лексикографически.

1) Проверяет, равны ли lhs и rhs. Эквивалентно !(lhs < rhs) && !(rhs < lhs).
2) Проверяет, не равны ли lhs и rhs. Эквивалентно !(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) Получает результат сравнения lhs и rhs. Эквивалентно lhs.compare(rhs) <=> 0.

Эти функции не видны для обычного неквалифицированного или квалифицированного поиска и могут быть найдены только с помощью поиска, зависящего от аргументов, когда std::filesystem::path является связанным классом аргументов. Это предотвращает нежелательные преобразования в присутствии using namespace std::filesystem; using-директивы.

Операторы <, <=, >, >=, и != синтезируются из оператора<=> и оператора== соответственно.

(с C++20)

Параметры

lhs, rhs - сравниваемые пути

Возвращаемое значение

1-6) true если соответствующее сравнение дает false, в противном случае.
7) std::strong_ordering::less если lhs меньше rhs, в противном случае std::strong_ordering::greater если rhs меньше lhs, в противном случае std::strong_ordering::equal.

Примечания

Равенство и эквивалентность путей имеют разный смысл.

В случае равенства, определяемого operator==, сравниваются только лексические представления. Поэтому path("a") == path("b") никогда не true.

В случае эквивалентности, определяемой std::filesystem::equivalent(), проверяется, ссылаются ли два пути на один и тот же объект файловой системы. Таким образом, equivalent("a", "b") вернёт true если пути ссылаются на один и тот же файл.

Пример

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение при публикации Правильное поведение
LWG 3065 C++17 разрешал сравнение всего, что допускает преобразование к path в присутствии using-директивы сделал скрытым другом

См. также

compare
сравнивает лексические представления двух путей лексикографически
(публичный член-функция)
equivalent
(C++17)
проверяет, ссылаются ли два пути на один и тот же объект файловой системы
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/path/operator_cmp

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API