Was ist std::span in C++ und wann sollte man es verwenden?
Hallo Kollegen! Ich schreibe seit etwa einem Jahr in C++, aber ich stoße ständig auf das Problem, Arrays und Buffer an Funktionen zu übergeben. Normalerweise übergebe ich einen Zeiger auf das erste Element und die Größe separat, aber das wirkt umständlich und fehleranfällig. Zum Beispiel:
```cpp
void process_data(int* arr, size_t size) {
for (size_t i = 0; i < size; ++i) {
// etwas mit arr[i] machen
}
}
int main() {
int data[] = {1, 2, 3, 4, 5};
process_data(data, 5); // funktioniert, aber leicht, sich bei der Größe zu irren
process_data(data, 100); // undefiniertes Verhalten, Fehler!
}
```
Vor kurzem bin ich auf `std::span` in C++20 gestoßen. Ich habe die Dokumentation gelesen, aber nicht ganz verstanden, warum es besser ist als ein normaler Zeiger + Größe. Anscheinend ist es nur ein "view" auf ein Array. Wozu braucht man es? Wann sollte man es anstelle der Übergabe eines Vektors per Referenz oder eines Paares (Zeiger, Größe) verwenden? Gibt es Fälle, in denen `span` nicht geeignet ist? Ich wäre dankbar für Beispiele aus der Praxis.
<<>>
Was ist std::span?