Avatar ·

¿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.