重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“C++怎么使用span
专注于为中小企业提供网站设计制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业中山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
F.24:使用span
半开是数学概念,指的是C++中的数组用[p:p+n)表示时,p指向第一个元素,而p+n则处于数组之外。
Reason(原因)
Informal/non-explicit ranges are a source of errors.
非正式的,不清楚的范围是错误之源。
Example(示例)
X* find(span
r, const X& v); // find v in r
vector
vec; // ...
auto p = find({vec.begin(), vec.end()}, X{}); // find X{} in ve
在C++代码中,范围的概念特别常见。典型情况下,范围不会被明示而且很难确认是否被正常使用。尤其,给定一对表示参数(p, n)以表示数组[n:p+n),通常不可能知道p的后面是否真有n个元素可用。作为简单的辅助类,span
译者注:很遗憾没有找到span_p
Example(示例)
span表示元素的范围,但是我们怎么操作范围中的元素呢?
void f(spans){ // range traversal (guaranteed correct) for (int x : s) cout << x << '\n'; // C-style traversal (potentially checked) for (gsl::index i = 0; i < s.size(); ++i) cout << s[i] << '\n'; // random access (potentially checked) s[7] = 9; // extract pointers (potentially checked) std::sort(&s[0], &s[s.size() / 2]);}
A span
object does not own its elements and is so small that it can be passed by value.
span
Passing a span
object as an argument is exactly as efficient as passing a pair of pointer arguments or passing a pointer and an integer count.
传递span对象作为参数和传递一对指针参数或者一个指针一个整数在高效性方面完全相同。
Enforcement(实施建议)
(复杂)当代码访问以整形值确定边界的指针类型参数时,报警并建议使用span代替。
到此,关于“C++怎么使用span