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(conststd::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(conststd::array<T,N>&& a )noexcept; | (4) | (C++11 起) (C++14 起为 constexpr ) |
使用元组式接口从 array
提取第 I
个元素。
I
必须是范围 [
0,
N)
中的整数值。与 at() 或 operator[] 相反,这在编译时强制。
目录 |
[编辑]参数
a | - | 要提取其内容的数组 |
[编辑]返回值
到 a 的第 I
元素的引用。
[编辑]复杂度
常数。
[编辑]示例
运行此代码
#include <array>#include <iostream> constexprstd::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; // 设置值: get<0>(a)=1, get<1>(a)=2, get<2>(a)=3; // 获取值: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) | 元组式访问指定的元素 (函数模板) |
(C++11) | 访问 pair 的一个元素 (函数模板) |
(C++17) | 以给定索引或类型(如果类型唯一)读取 variant 的值,错误时抛出异常 (函数模板) |
(C++20) | 从 std::ranges::subrange 获得迭代器或哨位 (函数模板) |
(C++26) | 从 std::complex 获取到实部或虚部的引用 (函数模板) |