Namespaces
Variants

std::ranges:: ssize

From cppreference.net
Ranges library
Range adaptors
定義先ヘッダ <ranges>
定義先ヘッダ <iterator>
inline namespace /* unspecified */ {

inline constexpr /* unspecified */ ssize = /* unspecified */ ;

}
(C++20以降)
(カスタマイゼーションポイントオブジェクト)
呼び出しシグネチャ
template < class T >

requires /* 下記参照 */

constexpr auto ssize ( T && t ) ;
(C++20以降)

t 内の要素数を定数時間で計算し、結果を符号付き型に変換します。

与えられた 部分式 において、 t が( 実体化された 可能性もある)結果オブジェクトを表し、 E とする:

目次

翻訳の説明: - "Contents" → "目次"(目次として自然な表現) - "Notes" → "注記"(技術文書で一般的な表現) - "Example" → "例"(簡潔で適切な訳) - "Defect reports" → "欠陥報告"(技術文書での標準的な表現) - "See also" → "関連項目"(技術文書で一般的な表現) - "Customization point objects" はC++専門用語のため翻訳せず保持 - HTMLタグ、属性、 内の数字は完全に保持

カスタマイゼーションポイントオブジェクト

名前 ranges::ssize カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト のconstな リテラル semiregular クラス型です。詳細は CustomizationPointObject を参照してください。

注記

ranges :: ssize ( e ) が有効な場合、戻り値の型は signed-integer-like type です。

#include <array>
#include <iostream>
#include <ranges>
#include <type_traits>
int main()
{
    std::array arr{1, 2, 3, 4, 5};
    auto s = std::ranges::ssize(arr);
    std::cout << "ranges::ssize(arr) = " << s << '\n'
              << "ranges::ssize is "
              << (std::is_signed_v<decltype(s)> ? "signed" : "unsigned")
              << '\n';
    std::cout << "reversed arr: ";
    for (--s; s >= 0; --s)
        std::cout << arr[s] << ' ';
    std::cout << "\n" "s = " << s << '\n';
}

出力:

ranges::ssize(arr) = 5
ranges::ssize is signed
reversed arr: 5 4 3 2 1
s = -1

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3403 C++20 ranges::size は一部の非レンジ型で動作したが ranges::ssize は動作しなかった 動作するように修正

関連項目

範囲のサイズに等しい整数を返す
(カスタマイゼーションポイントオブジェクト)
範囲が定数時間で自身のサイズを知ることを指定する
(コンセプト)
イテレータとセンチネル間、または範囲の先頭と終端間の距離を返す
(アルゴリズム関数オブジェクト)
(C++17) (C++20)
コンテナまたは配列のサイズを返す
(関数テンプレート)