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 для using namespace std::filesystem;.

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

(начиная с 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/cpp/filesystem/path/operator_cmp

Spec-Zone.ru

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