C++での通常の配列と比べてstd::arrayを使う際にデメリットはありますか?


C++での`配列(固定長)`には以下の2つがあると思いますが、`std::array`の方が確実に便利だと感じます。  
そこで完全に`std::array`に移行する際に、`std::array`にデメリットはないのかなと思い、質問させていただきました。

[code]

    int arr[10];
    
[/code]

[code]

    #include <array>
    
    std::array<int, 10> arr;
    
[/code]




既存の関数が、 `int*` 等のポインター型を要求することが多々あります。  
その際、C配列 `int arr[10]` ですと、歴史的に `arr` は `int*` へ暗黙変換が可能なのでそのまま渡せます。  
対してC++配列 `std::array<int, 10> arr` ですと、 `arr.data()`
等の記述が必要になりその部分が煩わしくなるかもしれません。  
どちらであっても [`std::data(arr)`](https://ja.cppreference.com/w/cpp/iterator/data) で
`int*` が取得可能なので、まずはそのように記述しておくのも一つの手です。

> 配列の長さを取得する際にめんどくさいなと感じ

こちらも [`std::size(arr)`](https://ja.cppreference.com/w/cpp/iterator/size)
でC配列・C++配列両方の長さを取得できます。

* * *

なお、C++20では[`std::span`](https://ja.cppreference.com/w/cpp/container/span)も登場しています。関数を設計する際、引数は`std::span`で受け取るという選択肢もあります。`std::span`でしたら、C配列・C++配列だけでなく`std::vector`なども使用可能です。




既存の関数が、 `int*` 等のポインター型を要求することが多々あります。  
その際、C配列 `int arr[10]` ですと、歴史的に `arr` は `int*` へ暗黙変換が可能なのでそのまま渡せます。  
対してC++配列 `std::array<int, 10> arr` ですと、 `arr.data()`
等の記述が必要になりその部分が煩わしくなるかもしれません。  
どちらであっても [`std::data(arr)`](https://ja.cppreference.com/w/cpp/iterator/data) で
`int*` が取得可能なので、まずはそのように記述しておくのも一つの手です。

> 配列の長さを取得する際にめんどくさいなと感じ

こちらも [`std::size(arr)`](https://ja.cppreference.com/w/cpp/iterator/size)
でC配列・C++配列両方の長さを取得できます。

* * *

なお、C++20では[`std::span`](https://ja.cppreference.com/w/cpp/container/span)も登場しています。関数を設計する際、引数は`std::span`で受け取るという選択肢もあります。`std::span`でしたら、C配列・C++配列だけでなく`std::vector`なども使用可能です。

