std::extent で配列サイズを取得

<type_traits>で定義されているテンプレートの1つに std::extent があります。これは配列のサイズを取得するためのテンプレート型です。
std::extentを使うことで、for文の条件式を以下のように書くことができます。
#include <iostream>
#include <type_traits>

int main(void)
{
    int a[3] = {1, 2, 3};

    // std::enxtentを使用
    for (size_t i = 0; i < std::extent<decltype(a)>::value; i++) {
        std::cout << a[i] << " "; // => "1 2 3 "
    }

    // C言語以来のクラシカルなやり方
    for (size_t i = 0; i < (sizeof(a) / sizeof(a[0])); i++) {
        std::cout << a[i] << " "; // => "1 2 3 "
    }

    return 0;
}
好みにもよりますが、C言語以来のクラシカルなやり方よりも、std::extent を使用する方が、スマートであるように思います。

0 件のコメント:

コメントを投稿