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 | добавлено |
См. также
| добавляет элементы к пути с разделителем каталогов (открытая функция-член) |
|
|
(C++17) | объединяет два пути с разделителем каталогов (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/path/concat