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) |
使用 元组式 接口从数组中提取第 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) | 将指定的名称绑定到初始化器的子对象或元组元素 |
访问指定元素 (公共成员函数) | |
使用边界检查访问指定元素 (公共成员函数) | |
(C++11) |
元组访问指定元素 (函数模板) |
(C++11) |
访问 pair 的元素(函数模板) |
(C++17) |
根据索引或类型读取变体的值(如果类型是唯一的),在错误时抛出异常 (函数模板) |
(C++20) |
从 std::ranges::subrange 获取迭代器或哨兵 (函数模板) |
(C++26) |
从 std::complex 获取对实部或虚部的引用 (函数模板) |