Spec-Zone.ru › C++

std::filesystem::path::concat, std::filesystem::path::operator+=

path& operator+=( const path& p );
(1) (начиная с C++17)
path& operator+=( const string_type& str );
path& operator+=( std::basic_string_view<value_type> str );
(2) (начиная с C++17)
path& operator+=( const value_type* ptr );
(3) (начиная с C++17)
path& operator+=( value_type x );
(4) (начиная с C++17)
template< class CharT >
path& operator+=( CharT x );
(5) (начиная с C++17)
template< class Source >
path& operator+=( const Source& source );
(6) (начиная с C++17)
template< class Source >
path& concat( const Source& source );
(7) (начиная с C++17)
template< class InputIt >
path& concat( InputIt first, InputIt last );
(8) (начиная с C++17)

Объединяет текущий путь с аргументом

1-3,6,7) Добавляет path(p).native() к имени пути, хранящемуся в *this, в собственном формате. Это напрямую изменяет значение native() и может быть непереносимым между операционными системами.
4,5) То же, что и return *this += std::basic_string_view(&x, 1);.
8) То же, что и return *this += path(first, last);.

(6) и (7) участвуют в разрешении перегрузки, только если Source и path не являются одним и тем же типом и выполняется одно из условий:

  • Source является специализацией std::basic_string или std::basic_string_view, или
  • std::iterator_traits<std::decay_t<Source>>::value_type корректно и обозначает тип кодируемого символа, возможно с квалификатором const (char, char8_t, (начиная с C++20)char16_t, char32_t или wchar_t).

Параметры

p - путь для добавления
str - строка или представление строки для добавления
ptr - указатель на начало строки с нулевым завершающим символом для добавления
x - одиночный символ для добавления
source - std::basic_string, std::basic_string_view, строка из нескольких символов с нулевым завершающим символом или входной итератор, указывающий на последовательность из нескольких символов с нулевым завершающим символом, которая представляет имя пути (в переносимом или собственном формате)
first, last - пара LegacyInputIterators, задающая последовательность из нескольких символов, представляющую имя пути
Требования к типам
-InputIt должен соответствовать требованиям LegacyInputIterator.
-Тип значения InputIt должен быть одним из типов кодируемых символов (char, wchar_t, char16_t и char32_t).
-CharT должен быть одним из типов кодируемых символов (char, wchar_t, char16_t и char32_t).

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

*this

Исключения

Может выбросить std::bad_alloc при сбое выделения памяти.

Примечания

В отличие от append() или operator/=, дополнительные разделители каталогов никогда не добавляются.

Пример

#include <filesystem>
#include <iostream>
#include <string>

int main()
{
    std::filesystem::path p1; // an empty path
    p1 += "var"; // does not insert a separator
    std::cout << R"("" + "var" --> )" << p1 << '\n';
    p1 += "lib"; // does not insert a separator
    std::cout << R"("var" + "lib" --> )" << p1 << '\n';
    auto str = std::string{"1234567"};
    p1.concat(std::begin(str) + 3, std::end(str) - 1);
    std::cout << "p1.concat --> " << p1 << '\n';
}

Вывод:

"" + "var" --> "var"
"var" + "lib" --> "varlib"
p1.concat --> "varlib456"

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

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

Отчёт об ошибке Применён к Опубликованное поведение Корректное поведение
LWG 3055 C++17 спецификация объединения с одиночным символом была некорректной исправлена
LWG 3244 C++17 отсутствовало ограничение, согласно которому Source не может быть path добавлено

См. также

appendoperator/=
добавляет элементы к пути с разделителем каталогов
(открытая функция-член)
operator/
(C++17)
объединяет два пути с разделителем каталогов
(функция)

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

Spec-Zone.ru

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