mirror of
https://github.com/microsoft/GSL.git
synced 2025-08-04 13:14:28 +02:00
A quick explanation of the differences between gsl::span and std::span
20
gsl::span-and-std::span.md
Normal file
20
gsl::span-and-std::span.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Span
|
||||||
|
## What is span
|
||||||
|
A span is a view over memory. It does not own the memory and is only a way to access contiguous sequences of objects.
|
||||||
|
|
||||||
|
The `gsl::span` is based on the standardized version of `std::span` which was added to C++20. Originally, the plan was to deprecate `gsl::span` when `std::span` finished standardization, however that plan changed when the runtime bounds checking was removed from `std::span`'s design.
|
||||||
|
|
||||||
|
## Differences between `gsl::span` and `std::span`
|
||||||
|
The only difference between `gsl::span` and `std::span` is that `gsl::span` strictly enforces runtime bounds checking. Any violations of the bounds check results in termination of the program.
|
||||||
|
|
||||||
|
## Which version of span should I use?
|
||||||
|
### Use gsl::span if:
|
||||||
|
- you want to guarantee bounds safety in your project.
|
||||||
|
- All data accessing operations use bounds checking to ensure you are only accessing valid memory.
|
||||||
|
- your project uses C++14 or C++17.
|
||||||
|
- `std::span` as it was not introduced into the STL until C++20.
|
||||||
|
### Use `std::span` if:
|
||||||
|
- your project is C++20 and you need the performance offered by `std::span`.
|
||||||
|
|
||||||
|
# span_iterator
|
||||||
|
Like `gsl::span`, `gsl::span`'s iterators also differ from `std::span`'s iterator in that all access operations are bounds checked.
|
Reference in New Issue
Block a user