std::span<T,Extent>:: operator=
|
constexpr
span
&
operator
=
(
const
span
&
other
)
noexcept
=
default
;
|
(自 C++20 起) | |
将 other 赋值给 * this 。此默认赋值运算符对数据指针和大小执行浅拷贝,即调用此函数后, data ( ) == other. data ( ) 且 size ( ) == other. size ( ) 。
目录 |
参数
| 其他 | - | 另一个用于复制的跨度 |
返回值
* this
示例
#include <algorithm> #include <array> #include <cassert> #include <cstddef> #include <iostream> #include <span> #include <string_view> void print(std::string_view info = "", std::span<const int> span = {}, std::size_t extent = 0, std::size_t size_of = 0) { if (span.empty()) { std::cout << info << '\n'; return; } std::cout << info << '[' << span.size() << "] {"; std::ranges::for_each(span, [](const int x) { std::cout << ' ' << x; }); std::cout << " }"; if (extent) { std::cout << " extent = "; if (extent == std::dynamic_extent) std::cout << "dynamic"; else std::cout << extent; } if (size_of) std::cout << ", sizeof = " << size_of; std::cout << '\n'; } int main() { std::array<int,6> a1; std::array<int,6> a2; a1.fill(3); a2.fill(4); auto s1 = std::span(a1); auto s2 = std::span(a2); print("s1", s1, s1.extent, sizeof(s1)); print("s2", s2, s2.extent, sizeof(s2)); // 检查赋值操作执行的是浅拷贝 s1 = s2; (s1.data() == s2.data() && s1.size() == s2.size()) ? print("s1 = s2; 是浅拷贝!") : print("s1 = s2; 是深拷贝!"); print("s1", s1); print("用5填充s1:"); std::ranges::fill(s1, 5); // s2也会被"更新",因为s1和s2指向相同的数据 assert(std::ranges::equal(s1, s2)); print("s1", s1); print("s2", s2); print(); int a3[]{1, 2, 3, 4}; int a4[]{2, 3, 4, 5}; int a5[]{3, 4, 5}; std::span<int, std::dynamic_extent> dynamic_1{a3}; std::span<int, std::dynamic_extent> dynamic_2{a4, 3}; std::span<int, 4> static_1{a3}; std::span<int, 4> static_2{a4}; std::span<int, 3> static_3{a5}; print("dynamic_1", dynamic_1
参见
构造
span
对象
(公开成员函数) |
|
|
直接访问底层连续存储
(公开成员函数) |
|
|
返回元素数量
(公开成员函数) |