std::get(std::array)
From cppreference.com
| ヘッダー <array> で定義 |
||
| template< std::size_t I, class T, std::size_t N > T& get( std::array<T,N>& a ) noexcept; |
(1) | (C++11以降) (C++14以降constexpr) |
| template< std::size_t I, class T, std::size_t N > T&& get( std::array<T,N>&& a ) noexcept; |
(2) | (C++11以降) (C++14以降constexpr) |
| template< std::size_t I, class T, std::size_t N > const T& get( const std::array<T,N>& a ) noexcept; |
(3) | (C++11以降) (C++14以降constexpr) |
| template< std::size_t I, class T, std::size_t N > const T&& get( const std::array<T,N>&& a ) noexcept; |
(4) | (C++11以降) (C++14以降constexpr) |
タプルライクなインターフェースを使用して、配列から I 番目の要素を抽出します。
I は、範囲 [0, N) 内の整数値でなければなりません。これは、at() や operator[] とは異なり、コンパイル時に強制されます。
目次 |
[編集] パラメータ
| a | - | 抽出する配列の内容 |
[編集] 戻り値
a の I 番目の要素への参照。
[編集] 計算量
定数。
[編集] 例
このコードを実行
#include <array> #include <iostream> constexpr std::array v{1, 2, 3}; static_assert(get<0>(v) == 1 && get<1>(v) == 2 && get<2>(v) == 3); int main() { std::array<int, 3> a; // set values: get<0>(a) = 1, get<1>(a) = 2, get<2>(a) = 3; // get values: std::cout << '(' << get<0>(a) << ',' << get<1>(a) << ',' << get<2>(a) << ")\n"; }
出力
(1,2,3)
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2485 | C++11 | const array&& のオーバーロードはありません。 | オーバーロードが追加されました。 |
[編集] 関連項目
| 構造化束縛 (C++17) | 指定された名前を初期化子のサブオブジェクトまたはタプル要素に束縛します |
| 指定された要素にアクセスする (public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする (public メンバ関数) | |
| (C++11) |
tuple は指定された要素にアクセスする (関数テンプレート) |
| (C++11) |
pairの要素にアクセスする(関数テンプレート) |
| (C++17) |
インデックスまたは型(型が一意である場合)を指定して variant の値を読み取る。エラーの場合は例外をスローする (function template) |
| (C++20) |
std::ranges::subrange からイテレータまたはセンチネルを取得します (関数テンプレート) |
| (C++26) |
std::complex から実部または虚部への参照を取得します (関数テンプレート) |