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

履歴 編集

customization point object
<ranges>

# std::ranges::ssize(C++20)

    namespace std::ranges {
      inline namespace /*unspecified*/ {
        inline constexpr /*unspecified*/ ssize = /*unspecified*/;
      }
    }

## 概要

Rangeの要素数を符号付き整数型で取得する関数オブジェクト。

## 効果

部分式`E`の型を`T`とする。このとき、式`ranges::ssize(E)`の効果は以下の式と等しい。

1. `range_difference_t<T>`が`ptrdiff_t`より狭ければ、`static_cast<ptrdiff_t>(ranges::size(E))`。
2. それ以外のとき、`static_cast<range_difference_t<T>>(ranges::size(E))`。

## 戻り値

Rangeの要素数。

## カスタマイゼーションポイント

`ranges::size`をカスタマイズすることで、`ranges::ssize`をカスタマイズできる。

## 例

    #include <cassert>
    #include <vector>
    #include <ranges>

    int main()
    {
      std::vector<int> v = {1, 2, 3};
      int ar[] = {1, 2, 3};

      // コンテナの要素数を取得。
      std::ptrdiff_t n1 = std::ranges::ssize(v);
      assert(n1 == 3);

      // 生配列の要素数を取得
      std::ptrdiff_t n2 = std::ranges::ssize(ar);
      assert(n2 == 3);
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅

## 関連項目

- `std::ssize`

## 参照

- N4861 24 Ranges library
- C++20 ranges