std::filesystem::path::concat, std::filesystem::path::operator+=
来自cppreference.com
                    
                                        
                    < 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/= ,决不放入附加的分隔符。
示例
运行此代码
输出:
"" + "var" == "var" "" + "var" + "lib" == "varlib"
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| DR | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 3055 | C++17 | 连接单个字符的规定为谬构 | 使之为良构 | 
| LWG 3244 | C++17 |  缺失 Source 不能为 path 的制约
 | 
已添加 | 
参阅
|   添加元素到带目录分隔符的路径  (公开成员函数)  | |
|   用目录分隔符连接二个路径  (函数)  |