std::to_array是C++20引入的函数模板,用于安全、自动推导类型和大小地将C风格数组转换为std::array,避免手动展开和指针退化问题,仅接受编译期已知边界的内置数组,不支持指针或运行时大小。

std::to_array 是 C++20 引入的一个便捷函数模板,用于**将 C 风格数组(即内置数组)安全、自动推导类型和大小地转换为 std::array**。它解决了手动构造 std::array 时需重复写类型和长度的繁琐问题,同时避免了隐式退化为指针的风险。
为什么需要 std::to_array?
在 C++17 及之前,把一个 C 数组转成 std::array 得这样写:
int c_arr[] = {1, 2, 3};
std::array arr = {c_arr[0], c_arr[1], c_arr[2]}; // 手动展开,易错
// 或用 std::array arr = std::array{c_arr[0], c_arr[1], c_arr[2]};
不仅冗长,还容易出错(比如长度写错、类型不一致),也不能直接从数组名推导——因为 c_arr 作为参数传入函数时会退化为指针。
std::to_array 的基本用法
它定义在 头文件中,语法简洁:
立即学习“C++免费学习笔记(深入)”;
#include
int data[] = {10, 20, 30, 40};
auto arr = std::to_array(data); // 推导为 std::array
编译器自动获取数组的元素类型和长度,返回一个值语义的 std::array 对象。
支持任意元素类型(基础类型、类类型、甚至 const 限定类型)支持多维 C 数组(如 int m[2][3] → std::array, 2>)对字符串字面量也友好:std::to_array("hello") → std::array(含 ‘