最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<filesystem>

# std::filesystem::path::generic_u8string(C++17)

    std::string generic_u8string() const;   // (1) C++17
    std::u8string generic_u8string() const; // (1) C++20

## 概要

UTF-8エンコードで、環境非依存パスフォーマットのパス文字列を取得する。

## 戻り値

`*this`が保持するシステムの環境非依存パスフォーマットを持つパスを、UTF-8エンコードで返す。

## 備考

- C++20から、破壊的変更として戻り値の型が`std::string`から`std::u8string`に変更となっている。これは、UTF-8エンコードされた文字型として`char8_t`が追加され、`char`型と型レベルで区別できるようにしたためである

## 例

### POSIXベースシステムでの例

    #include <cassert>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path p = "/usr/bin/clang";
      auto s = p.generic_u8string();

      // システムのマルチバイト文字コードからUTF-8に変換されたパス文字列が返される
      assert(s == u8"/usr/bin/clang");
    }

#### 出力

### Windowsでの例

    #include <cassert>
    #include <filesystem>

    namespace fs = std::filesystem;

    int main()
    {
      fs::path p = "foo\\bar";
      auto s = p.generic_u8string();

      // システムのマルチバイト文字コードからUTF-8に変換されたパス文字列が返される
      assert(s == u8"foo/bar");
    }

#### 出力

## バージョン

### 言語

- C++17

### 処理系

- Clang:
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅

## 関連項目

- C++20 `char8_t`