最終更新日時(UTC):
が更新

履歴 編集

function
<spanstream>

std::basic_ispanstream::span(C++23)

std::span<const charT> span() const noexcept; // (1)

void span(std::span<charT> s) noexcept;       // (2)

template<class ROS>
void span(ROS&& s) noexcept;                  // (3)

概要

固定長バッファの取得または設定をする。

  • (1) : std::span 型の固定長バッファを取得する
  • (2) : std::span 型の固定長バッファ s を設定する
  • (3) : s から std::span 型の固定長バッファを作成し、それを設定する

テンプレートパラメータ制約

  • (3) : ROSranges::borrowed_range の要求を満たすこと ((!convertible_to<ROS, std::span<charT>>) && convertible_to<ROS, std::span<const charT>>trueであること)。

効果

  • (1) : return rdbuf()->span(); と同等
  • (2) : rdbuf()->span(s) と同等
  • (3) : std::span<const charT>(std::forward<ROS>(s))sp とした時、this->span(std::span<charT>(const_cast<charT*>(sp.data()), sp.size())) と同等

#include <array>
#include <iostream>
#include <span>
#include <spanstream>

int main()
{
  char buf1[32] = "default";
  std::span<char> span1{buf1};
  std::ispanstream iss{span1};

  // (1)
  std::span<const char> read = iss.span();

  std::cout << "(1)" << std::endl;
  std::cout << read.data() << std::endl;
  std::cout << std::endl;

  char buf2[32] = "overwritten";
  std::span<char> span2{buf2};

  // (2)
  iss.span(span2);

  std::cout << "(2)" << std::endl;
  std::cout << iss.span().data() << std::endl;
  std::cout << std::endl;

  std::array<char, 5> buf3 = {'l', 'a', 's', 't', '\0'};

  // (3)
  iss.span(buf3);

  std::cout << "(3)" << std::endl;
  std::cout << iss.span().data() << std::endl;
}

出力

(1)
default

(2)
overwritten

(3)
last

バージョン

言語

  • C++23

処理系

関連項目