Avatar ·

什么是 C++ 中的 std::span,何时应该使用它?

大家好!我写 C++ 已经大约一年了,但一直遇到将数组和缓冲区传递给函数的问题。通常我单独传递指向第一个元素的指针和大小,但这看起来很笨重且容易出错。例如: ```cpp void process_data(int* arr, size_t size) { for (size_t i = 0; i < size; ++i) { // 对 arr[i] 做点什么 } } int main() { int data[] = {1, 2, 3, 4, 5}; process_data(data, 5); // 可以工作,但容易在大小上出错 process_data(data, 100); // undefined behavior,错误! } ``` 最近我在 C++20 中遇到了 `std::span`。我读了文档,但还没完全明白它比普通的指针+大小好在哪里。看起来它只是一个数组的 "view"。它有什么用?什么时候应该使用它而不是通过引用传递 vector 或传递 (指针, 大小) 对?有没有 `span` 不适用的情况?我将感谢来自现实生活的例子。 <<>>

什么是 std::span?