std::filesystem::path:: append, std::filesystem::path:: operator/=
|
path
&
operator
/
=
(
const
path
&
p
)
;
|
(1) | (C++17以降) |
|
template
<
class
Source
>
path & operator / = ( const Source & source ) ; |
(2) | (C++17以降) |
|
template
<
class
Source
>
path & append ( const Source & source ) ; |
(3) | (C++17以降) |
|
template
<
class
InputIt
>
path & append ( InputIt first, InputIt last ) ; |
(4) | (C++17以降) |
path::preferred_separator
を
*
this
のジェネリック形式に追加する。
// "//host" がルート名の場合 path("//host") / "foo" // 結果は "//host/foo" (セパレーター付きで追加) path("//host/") / "foo" // 結果も同様に "//host/foo" (セパレーターなしで追加) // POSIX の場合 path("foo") / "" // 結果は "foo/" (追加) path("foo") / "/bar"; // 結果は "/bar" (置換) // Windows の場合 path("foo") / "C:/bar"; // 結果は "C:/bar" (置換) path("foo") / "C:"; // 結果は "C:" (置換) path("C:") / ""; // 結果は "C:" (セパレーターなしで追加) path("C:foo") / "/bar"; // "C:/bar" を生成 (相対パスを削除して追加) path("C:foo") / "C:bar"; // "C:foo/bar" を生成 (pのルート名を省略して追加)
(2)
および
(3)
は、
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 | - | 追加するパス名 |
| source | - | std::basic_string , std::basic_string_view 、ヌル終端マルチ文字列、またはヌル終端マルチ文字シーケンスを指す入力イテレータ(ポータブル形式またはネイティブ形式のいずれかのパス名を表す) |
| first, last | - | パス名を表すマルチ文字シーケンスを指定する LegacyInputIterator のペア |
| 型要件 | ||
-
InputIt
は
LegacyInputIterator
の要件を満たさなければならない。
|
||
-
InputIt
の値型は、エンコードされた文字型(
char
、
wchar_t
、
char16_t
および
char32_t
)のいずれかでなければならない。
|
||
戻り値
* this
例外
メモリ確保に失敗した場合、 std:: bad_alloc をスローする可能性があります。
注記
これらの関数は、引数パス p の意味を、 * this が開始ディレクトリとなる環境下で効果的に近似します。
例
出力はWindowsで生成されます。
#include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { fs::path p1 = "C:"; p1 /= "Users"; // does not insert a separator std::cout << "\"C:\" / \"Users\" == " << p1 << '\n'; p1 /= "batman"; // inserts fs::path::preferred_separator, '\' on Windows std::cout << "\"C:\" / \"Users\" / \"batman\" == " << p1 << '\n'; }
出力例:
"C:" / "Users" == "C:Users" "C:" / "Users" / "batman" == "C:Users\\batman"
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3244 | C++17 |
Source
が
path
であってはならないという制約が欠落していた
|
追加された |
関連項目
|
2つのパスをディレクトリ区切り文字を挿入せずに連結する
(公開メンバ関数) |
|
|
(C++17)
|
2つのパスをディレクトリ区切り文字で連結する
(関数) |