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( InputIt first, InputIt 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);。
仅若 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)
(6) 与 (7) 才参与重载决议。
参数
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 <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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3055 | C++17 | 连接单个字符的规定为谬构 | 使之为良构 |
LWG 3244 | C++17 | 缺失 Source 不能为 path 的制约
|
已添加 |
参阅
以目录分隔符向路径添加元素 (公开成员函数) | |
用目录分隔符连接两个路径 (函数) |