標準ライブラリクラステンプレートstd::array<T, N>
すべてoperator[]
オーバーロードがされている、両方のメンバアクセッサ関数C++ 17でstd :: arrayでstd :: getを使用するとパフォーマンスが向上しますか?
constexpr const T& operator[](size_type n) const;
ならびに非メンバアクセッサ関数テンプレート
template< size_t I, class T, size_t N >
constexpr const T& get(const array<T,N>& a) noexcept
を有しますconstexpr
を作ったので、残っているものがあれば、それはstd::get
というものが何であるか不思議です。例えば。このようなプログラムで:
int main()
{
auto a = std::array<int, 3> { 1, 2, 3 };
constexpr auto idx = 0;
std::cout << a[idx] << '\n';
std::cout << std::get<idx>(a) << '\n';
}
まともなコンパイラがoperator[]
とget
の両方のために一定の指標値0
を伝播することができるはずです。
質問:std::get
std::array
にoperator[]
がないことを何恩恵を与えるのでしょうか?
利点は、 'std :: array'が' std :: tuple'が期待される多くの場所で使用できることです。 – Justin
パフォーマンスは賢明ではありませんAFAIK;あなたのコンパイラオプティマイザがその仕事をしていると仮定します。 –