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

< cpp‎ | filesystem‎ | path

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( InputIterator first, InputIterator last ); | (8) | (C++17 起)

连接当前路径与参数。

1-3,6-7) 后附 path(other).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 | - | 一对指定代表路径名的字符序列的老式输入迭代器 (LegacyInputIterator)
类型要求
- `InputIt` 必须满足老式输入迭代器 (LegacyInputIterator) 的要求。
- `InputIt` 的 value_type 必须是编码字符类型（char 、 wchar_t 、 char16_t 及 char32_t）之一
- `CharT` 必须是编码字符类型（char 、 wchar_t 、 char16_t 及 char32_t）之一

### 返回值

*this

### 异常

若内存分配失败则可能抛出 std::bad_alloc 。

### 注解

不同于 append() 或 operator/= ，决不放入附加的分隔符。

### 示例

    #include <iostream>
    #include <filesystem>
    namespace fs = std::filesystem;
    int main() {
        fs::path p1; // 空路径
        p1 += "var"; // 不插入分隔符
        std::cout << "\"\" + \"var\" == " << p1 << '\n';
        p1 += "lib"; // does not insert a separator
        std::cout << "\"\" + \"var\" + \"lib\" == " << p1 << '\n';
    }

输出：

    "" + "var" == "var"
    "" + "var" + "lib" == "varlib"

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3055 | C++17 | 连接单个字符的规定为谬构 | 使之为良构
LWG 3244 | C++17 | 缺失 `Source` 不能为 `path` 的制约 | 已添加

### 参阅

append operator/= | 添加元素到带目录分隔符的路径 (公开成员函数)
operator/ | 用目录分隔符连接二个路径 (函数)