¿Qué es std::span en C++ y cuándo debería usarse?
¡Hola, colegas! Llevo escribiendo en C++ aproximadamente un año, pero constantemente me enfrento al problema de pasar arrays y buffers a funciones. Normalmente paso un puntero al primer elemento y el tamaño por separado, pero esto parece engorroso y propenso a errores. Por ejemplo:
```cpp
void process_data(int* arr, size_t size) {
for (size_t i = 0; i < size; ++i) {
// hacemos algo con arr[i]
}
}
int main() {
int data[] = {1, 2, 3, 4, 5};
process_data(data, 5); // funciona, pero es fácil equivocarse con el tamaño
process_data(data, 100); // undefined behavior, ¡error!
}
```
Recientemente me topé con `std::span` en C++20. Leí la documentación, pero no terminé de entender en qué es mejor que el puntero normal + tamaño. Parece ser simplemente una "view" sobre un array. ¿Para qué sirve? ¿Cuándo debería usarse en lugar de pasar un vector por referencia o un par (puntero, tamaño)? ¿Hay casos donde `span` no es adecuado? Agradecería ejemplos de la vida real.