std::span<T,Extent>::operator=
来自cppreference.com
constexpr span& operator=(const span& other )noexcept=default; | (C++20 起) | |
赋值 other 给 *this。此预置的赋值运算符进行数据指针和大小的浅复制,即调用此函数后,data()== other.data() 且 size()== other.size()。
目录 |
[编辑] 参数
other | - | 要复制的另一 span |
[编辑] 返回值
*this
[编辑]示例
运行此代码
#include <algorithm>#include <array>#include <cassert>#include <cstddef>#include <iostream>#include <span>#include <string_view> void print(std::string_view info ="", std::span<constint> 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, [](constint x){std::cout<<' '<< x;});std::cout<<" }"; if(extent){std::cout<<" 长度 = ";if(extent ==std::dynamic_extent)std::cout<<"dynamic";elsestd::cout<< extent;} if(size_of)std::cout<<", 大小 = "<< 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, dynamic_1.extent, sizeof(dynamic_1)); print("dynamic_2", dynamic_2, dynamic_2.extent, sizeof(dynamic_2)); print("static_1", static_1, static_1.extent, sizeof(static_1)); print("static_2", static_2, static_2.extent, sizeof(static_2)); print("static_3", static_3, static_3.extent, sizeof(static_3)); dynamic_1 = dynamic_2;// OK dynamic_1 = static_1;// OK// static_1 = dynamic_1; // 错误:无匹配的 ‘operator=’ static_1 = static_2;// OK:相同长度 = 4// static_1 = static_3; // 错误:不同长度:4 与 3}
输出:
s1[6] { 3 3 3 3 3 3 } 长度 = 6, 大小 = 8 s2[6] { 4 4 4 4 4 4 } 长度 = 6, 大小 = 8 s1 = s2; 是浅复制! s1[6] { 4 4 4 4 4 4 } Fill s1 with 5: s1[6] { 5 5 5 5 5 5 } s2[6] { 5 5 5 5 5 5 } dynamic_1[4] { 1 2 3 4 } 长度 = dynamic, 大小 = 16 dynamic_2[3] { 2 3 4 } 长度 = dynamic, 大小 = 16 static_1[4] { 1 2 3 4 } 长度 = 4, 大小 = 8 static_2[4] { 2 3 4 5 } 长度 = 4, 大小 = 8 static_3[3] { 3 4 5 } 长度 = 3, 大小 = 8
[编辑] 参阅
构造 span (公开成员函数) | |
直接访问底层连续存储 (公开成员函数) | |
返回元素数 (公开成员函数) |