std::get(std::array)
來自 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) |
使用 類元組 (tuple-like) 介面從陣列中提取第 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2485 | C++11 | 沒有 const array&& 的過載 | 已新增過載 |
[編輯] 參閱
結構化繫結 (C++17) | 將指定名稱繫結到初始化器的子物件或元組元素 |
訪問指定的元素 (公共成員函式) | |
訪問指定的元素,帶邊界檢查 (公共成員函式) | |
(C++11) |
tuple 訪問指定的元素 (函式模板) |
(C++11) |
訪問 pair 的元素(函式模板) |
(C++17) |
根據索引或型別(如果型別唯一)讀取變體的值,出錯時丟擲異常 (函式模板) |
(C++20) |
從 std::ranges::subrange 獲取迭代器或哨兵 (函式模板) |
(C++26) |
從 std::complex 獲取實部或虛部的引用 (函式模板) |