- filesystem[meta header]
- std::filesystem[meta namespace]
- path[meta class]
- function[meta id-type]
- cpp17[meta cpp]
std::string u8string() const; // (1) C++17
std::u8string u8string() const; // (1) C++20
UTF-8エンコードで、パス文字列を取得する。
*this
が保持するシステムのネイティブフォーマットを持つパスを、UTF-8エンコードで返す。
- C++20から、破壊的変更として戻り値の型が
std::string
からstd::u8string
に変更となっている。これは、UTF-8エンコードされた文字型としてchar8_t
が追加され、char
型と型レベルで区別できるようにしたためである
#include <cassert>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path p = "/usr/bin/clang";
auto s = p.u8string();
// システムのマルチバイト文字コードからUTF-8に変換されたパス文字列が返される
assert(s == u8"/usr/bin/clang");
}
- p.u8string()[color ff0000]
#include <cassert>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path p = "foo/bar";
auto s = p.u8string();
// システムのマルチバイト文字コードからUTF-8に変換されたパス文字列が返される
assert(s == u8"foo\\bar");
}
- p.u8string()[color ff0000]
Windowsでの例は、Visual C++が正式にファイルシステムライブラリをサポートしていないことから、未検証のサンプルコード・出力となっている。
- C++17
- Clang:
- GCC, C++17 mode: 8.1
- Visual C++: