Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 2.64 KB

op_istream.md

File metadata and controls

112 lines (82 loc) · 2.64 KB

operator>>

  • filesystem[meta header]
  • std::filesystem[meta namespace]
  • path[meta class]
  • function template[meta id-type]
  • cpp17[meta cpp]
namespace std::filesystem {
  template <class CharT, class Traits>
  std::basic_istream<CharT, Traits>&
    operator>>(std::basic_istream<CharT, Traits>& is, path& p); // (1) C++17
}

template <class CharT, class Traits>
friend std::basic_istream<CharT, Traits>&
  operator>>(std::basic_istream<CharT, Traits>& is, path& p);   // (2) C++20

概要

ストリームから入力する。

pathオブジェクトにおいては、パス文字列が入力されること。

  • 入力されるパス文字列のフォーマットは、システムフォーマットでも、システム非依存フォーマットどちらでも受け入れられる
  • 入力されるパス文字列は、ダブルクォーテーション囲みされていても、されていなくても、どちらでも受け入れられる

効果

以下と等価:

std::basic_string<CharT, Traits> tmp;
is >> quoted(tmp);
p = tmp;
  • quoted[link /reference/iomanip/quoted.md]

戻り値

is

備考

  • この関数は、C++20で非メンバ関数から、friendメンバ関数に変更された。そのため、std::filesystem::operator<<という完全名の指定では呼び出せず、ADLによって呼び出すことになる

POSIXベースシステムでの例

#include <cassert>
#include <sstream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  std::istringstream ss {"\"a/b/c\""};

  fs::path p;
  ss >> p;

  assert(p.native() == "a/b/c");
}
  • p.native()[link native.md]

出力

Windowsでの例

#include <cassert>
#include <sstream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  std::istringstream ss {"\"a/b/c\""};

  fs::path p;
  ss >> p;

  assert(p.native() == L"a/b/c");
}
  • p.native()[link native.md]

出力

バージョン

言語

  • C++17

処理系

参照