Пространства имён
Варианты
Действия

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)

Выполняет лексикографическое сравнение двух путей.

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 является ассоциированным классом аргументом. This prevents undesirable conversions in the presence of a using namespace std::filesystem; using-directive.

Операторы <, <=, >, >= и != синтезируются из 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++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 3065 C++17 допускалось сравнение любых объектов, способных преобразовываться
к классу path, при использовании using-директивы
сделаны скрытыми
дружественными

[править] См. также

лексикографическое сравнение двух путей
(public функция-элемент) [править]
проверяет, ссылаются ли два пути на один и тот же объект файловой системы
(функция) [править]