Namespaces
Variants

std::span<T,Extent>:: operator=

From cppreference.net
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 对象
(公开成员函数)
直接访问底层连续存储
(公开成员函数)
返回元素数量
(公开成员函数)