std::filesystem::path::concat, std::filesystem::path::operator+=
From 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(p).native() を追加します。これは 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 | - | 追加するヌル終端文字列の先頭へのポインタ |
| x | - | 追加する単一文字 |
| source | - | std::basic_string、std::basic_string_view、ヌル終端マルチ文字文字列、またはパス名を表現する(ポータブルまたはネイティブ形式の)入力イテレータ。 |
| first, last | - | パス名を表現するマルチ文字シーケンスを指定する、LegacyInputIterator のペア。 |
| 型要件 | ||
-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ではないという制約が欠落していました |
追加された |
[編集] 関連項目
| ディレクトリセパレータでパスの末尾に要素を追加します。 (public member function) | |
| (C++17) |
ディレクトリセパレータで2つのパスを連結します。 (function) |