- filesystem[meta header]
- std::filesystem[meta namespace]
- path[meta class]
- function[meta id-type]
- cpp17[meta cpp]
path& operator=(const path& p); // (1)
path& operator=(path&& p) noexcept; // (2)
path& operator=(string_type&& source); // (3)
template <class Source>
path& operator=(const Source& source); // (4)- (1) : コピー代入
- (2) : ムーブ代入
- (3) : 内部表現としての文字列オブジェクトを代入する
- (4) : あらゆる文字型・文字コードの文字配列、文字列オブジェクトを代入する
- (4) :
Source型は、以下の要件を満たすこと- 文字型
char、wchar_t、char8_t、char16_t、char32_tをEcharTとして、 std::basic_string<EcharT, traits, Allocator>`std::basic_string_view<EcharT, traits>ECharT型を要素とする文字配列と、文字配列へのポインタ- これらの要件を満たさない場合、この関数はオーバーロード解決の候補から除外される
sourceはヌルポインタであってはならない
- 文字型
- (1) :
*thisとpが同じオブジェクトである場合は、なにもしない。そうでなければ、*thisが現在保持しているパスを破棄して、pをコピーして*thisに保持する - (2) :
*thisとpが同じオブジェクトである場合は、なにもしない。そうでなければ、swap(p)を呼び出す。この関数を呼び出したあと、pは「有効だが未規定の状態」となる - (3) :
sourceのパスフォーマットを検出して内部用に変換し、*thisにムーブ代入する。この関数を呼び出したあと、sourceは「有効だが未規定の状態」となる - (4) :
sourceのパスフォーマットを検出して内部用に変換し、*thisにそのパスのコピーを保持する
*this
#include <cassert>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
// (1)
// コピー代入
{
fs::path p = "a/b/c";
fs::path q;
q = p;
assert(p == q);
}
// (2)
// ムーブ代入
{
fs::path p = "a/b/c";
fs::path q;
q = std::move(p);
assert(q.generic_string() == "a/b/c");
}
// (3)
// 内部表現形式のbasic_stringを代入。
// この文字列は、システムのファイルシステムが規定する文字コードを持つこと。
// POSIXではstd::string、Windowsではstd::wstring。
// ここではPOSIX環境であるとしてstd::stringを使用する
{
std::string raw_path = "a/b/c";
fs::path p;
p = std::move(raw_path);
assert(p.generic_string() == "a/b/c");
}
// (4)
// 文字コード規定の文字配列、文字列オブジェクトを代入。
// Windows環境では、この方法ではUTF-8文字列を代入してはならない
// (std::filesystem::u8path()関数で変換したパスを代入すること)
{
fs::path p1;
p1 = "a/b/c"; // システムのマルチバイト文字コードの文字配列を代入
fs::path p2;
p2 = L"a/b/c"; // システムのワイド文字コードの文字配列を代入
fs::path p3;
p3 = u"a/b/c"; // UTF-16エンコーディングの文字配列を代入
fs::path p4;
p4 = U"a/b/c"; // UTF-32エンコーディングの文字配列を代入
std::string p5_base = "a/b/c";
fs::path p5;
p5 = p5_base; // システムのマルチバイト文字コードのstringオブジェクトを代入
std::wstring p6_base = L"a/b/c";
fs::path p6;
p6 = p6_base; // システムのワイド文字コードのwstringオブジェクトを代入
std::u16string p7_base = u"a/b/c";
fs::path p7;
p7 = p7_base; // u16stringオブジェクトを代入
std::u32string p8_base = U"a/b/c";
fs::path p8;
p8 = p8_base; // u32stringオブジェクトを代入
std::string_view p9_base = "a/b/c";
fs::path p9;
p9 = p9_base; // システムのマルチバイト文字コードの文字列を参照するstring_viewオブジェクトを代入
std::wstring_view p10_base = L"a/b/c";
fs::path p10;
p10 = p10_base; // システムのワイド文字コードの文字列を参照するwstring_viewオブジェクトを代入
std::u16string_view p11_base = u"a/b/c";
fs::path p11;
p11 = p11_base; // UTF-16エンコーディングの文字列を参照するu16string_viewオブジェクトを代入
std::u32string_view p12_base = U"a/b/c";
fs::path p12;
p12 = p12_base; // UTF-32エンコーディングの文字列を参照するu32string_viewオブジェクトを代入
}
}- std::move[link /reference/utility/move.md]
- p.generic_string()[link generic_string.md]
- C++17
- Clang:
- GCC, C++17 mode: 8.1
- Visual C++: