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) :
ROSがranges::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
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??