最終更新日時:
が更新

履歴 編集

class template
<simd>

std::simd::flags(C++26)

namespace std::simd {
  template<class... Flags>
  struct flags {
    template<class... Other>
    friend consteval auto operator|(flags, flags<Other...>);
  };

  inline constexpr flags<> flag_default{};
  inline constexpr flags</*convert-flag*/> flag_convert{};
  inline constexpr flags</*aligned-flag*/> flag_aligned{};
  template<std::size_t N> requires (has_single_bit(N))
  constexpr flags</*overaligned-flag*/<N>> flag_overaligned{};
}

概要

flagsは、basic_vecの読み込み/書き込み(unchecked_loadunchecked_storeや、範囲を取るコンストラクタなど)の動作を制御するためのフラグをまとめて表すクラステンプレートである。整数のビットフラグのように、operator|で複数のフラグを合成できる。

通常は、以下の定義済みフラグオブジェクトを使用する。

フラグ 説明
flag_default 既定の動作(フラグなし)。要素型とメモリの型が一致し、アライメント要件を仮定しない
flag_convert メモリの要素型がbasic_vecの要素型と異なる場合に、変換読み込み/書き込みを許可する
flag_aligned メモリ先頭がbasic_vecのアライメント要件(alignment_v)を満たしていると仮定する
flag_overaligned<N> メモリ先頭がNバイト境界にアライメントされていると仮定する(Nは2の冪)

メンバ関数

非メンバ(Hidden friends)関数

名前 説明 対応バージョン
operator| 2つのflagsを合成する C++26

#include <simd>
#include <array>
#include <print>

namespace simd = std::simd;

int main()
{
  std::array<float, 4> data = {1.0f, 2.0f, 3.0f, 4.0f};

  // アライメント済みメモリからの読み込みを指定
  simd::vec<float, 4> v = simd::unchecked_load(data, simd::flag_aligned);

  std::print("{}", v[0]);
  std::println("");
}

出力

1

バージョン

言語

  • C++26

処理系

関連項目

参照