Namespaces
Variants

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

From cppreference.net
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 , (since C++20) char16_t , char32_t , или wchar_t ).

Содержание

Параметры

p - путь для добавления
str - строка или string view для добавления
ptr - указатель на начало null-терминированной строки для добавления
x - одиночный символ для добавления
source - std::basic_string , std::basic_string_view , null-терминированная многобайтовая строка, или входной итератор, указывающий на null-терминированную многобайтовую последовательность, которая представляет имя пути (в портируемом или нативном формате)
first, last - пара LegacyInputIterator s , которая определяет многобайтовую последовательность, представляющую имя пути
Требования к типам
-
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; // пустой путь
    p1 += "var"; // не вставляет разделитель
    std::cout << R"("" + "var" --> )" << p1 << '\n';
    p1 += "lib"; // не вставляет разделитель
    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++.

DR Applied to Behavior as published Correct behavior
LWG 3055 C++17 спецификация конкатенации одного символа была некорректно сформирована сделана корректно сформированной
LWG 3244 C++17 ограничение, что Source не может быть path отсутствовало добавлено

Смотрите также

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