我知道这可能与什么是“跨度”以及何时应该使用“跨度”这个问题重叠?,但我认为问题的这个特定部分的答案非常令人困惑。一方面,有这样的引用:
如果您有一个您知道适合您的代码的标准库容器(或 Boost 容器等),请不要使用它。它并不打算取代其中任何一个。
但在同一个答案中,出现了以下语句:
当您希望数据在内存中连续时,将 const vector& 传递给函数是合理的替代方法。再也不用被高大上的 C++ 大师骂了!
那么我没有到达这里的哪一部分?我什么时候会这样做:
void foo(const std::vector<int>& vec) {}
什么时候?
void foo(std::span<int> sp) {}
还有,这会
void foo(const std::span<int> sp) {}
有什么意义吗?我认为它不应该,因为 astd::span
只是 a struct
,包含一个指针和长度。但是,如果它不阻止您更改std::vector
作为参数传递的值,它如何替换 a const std::vector<T>&
?