std::filesystem::path::concat, std::filesystem::path::operator+=
path& operator+=( const path& p ); |
(1) | (since C++17) |
path& operator+=( const string_type& str ); path& operator+=( std::basic_string_view<value_type> str ); |
(2) | (since C++17) |
path& operator+=( const value_type* ptr ); |
(3) | (since C++17) |
path& operator+=( value_type x ); |
(4) | (since C++17) |
template< class CharT > path& operator+=( CharT x ); |
(5) | (since C++17) |
template< class Source > path& operator+=( const Source& source ); |
(6) | (since C++17) |
template< class Source > path& concat( const Source& source ); |
(7) | (since C++17) |
template< class InputIt > path& concat( InputIt first, InputIt last ); |
(8) | (since 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допустимо и обозначает, возможно, квалифицированный типом символа кодировки (char,char8_t, (since C++20)char16_t,char32_t, илиwchar_t).
Параметры
| p | - | путь для присоединения |
| str | - | строка или представление строки для присоединения |
| ptr | - | указатель на начало null-терминированной строки для присоединения |
| x | - | одиночный символ для присоединения |
| source | - | std::basic_string, std::basic_string_view, null-терминированная строка с несколькими символами или итератор входных данных, указывающий на null-терминированную последовательность с несколькими символами, представляющая имя пути (в переносимом или родном формате) |
| 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++.
| DR | Применён к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| 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/w/cpp/filesystem/path/concat