Namespaces
Variants

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

From cppreference.net
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 ( ) をネイティブ形式で追加します。これは * this native ( ) 値を直接操作するため、オペレーティングシステム間での移植性が保証されない可能性があります。
4,5) 次と同じ return * this + = std:: basic_string_view ( & x, 1 ) ; .
8) return * this + = path ( first, last ) ; と同じです。

(6) および (7) は、以下のいずれかの条件が満たされる場合にのみオーバーロード解決に参加します: Source path が同じ型ではないこと、かつ以下のいずれか:

目次

翻訳のポイント: - 「Contents」を「目次」に翻訳 - C++関連の専門用語(Parameters、Return value、Exceptions、Notes、Example、Defect reports、See also)は原文のまま保持 - HTMLタグ、属性、クラス名は一切変更せず - 数値、リンク、構造は完全に維持 - プロフェッショナルな技術文書としての正確性を確保

パラメータ

p - 追加するパス
str - 追加する文字列または文字列ビュー
ptr - 追加するヌル終端文字列の先頭へのポインタ
x - 追加する単一文字
source - std::basic_string std::basic_string_view 、ヌル終端マルチ文字列、またはヌル終端マルチ文字シーケンスを指す入力イテレータ(ポータブル形式またはネイティブ形式のいずれかのパス名を表す)
first, last - パス名を表すマルチ文字シーケンスを指定する LegacyInputIterator s のペア
型要件
-
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; // 空のパス
    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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3055 C++17 単一文字の連結仕様が不適格であった 適切な形式に修正
LWG 3244 C++17 Source path であってはならないという制約が欠落していた 追加済み

関連項目

ディレクトリ区切り文字を使用してパスに要素を追加する
(公開メンバ関数)
(C++17)
ディレクトリ区切り文字を使用して2つのパスを連結する
(関数)