std::span<T,Extent>:: operator=
|
constexpr
span
&
operator
=
(
const
span
&
other
)
noexcept
=
default
;
|
(C++20부터) | |
other 를 * this 에 할당합니다. 이 기본 할당 연산자는 데이터 포인터와 크기의 얕은 복사(shallow copy)를 수행합니다. 즉, 이 함수 호출 후에는 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("s1을 5로 채우기:"); std::ranges::fill(s1, 5); // s1과 s2가 동일한 데이터를 가리키므로 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; // ERROR: no match for ‘operator=’ static_1 = static_2; // OK: 동일한 범위 = 4 // static_1 = static_3; // ERROR: different extents: 4 and 3 }
출력:
s1[6] { 3 3 3 3 3 3 } extent = 6, sizeof = 8
s2[6] { 4 4 4 4 4 4 } extent = 6, sizeof = 8
s1 = s2; 는 얕은 복사입니다!
s1[6] { 4 4 4 4 4 4 }
s1을 5로 채움:
s1[6] { 5 5 5 5 5 5 }
s2[6] { 5 5 5 5 5 5 }
dynamic_1[4] { 1 2 3 4 } extent = dynamic, sizeof = 16
dynamic_2[3] { 2 3 4 } extent = dynamic, sizeof = 16
static_1[4] { 1 2 3 4 } extent = 4, sizeof = 8
static_2[4] { 2 3 4 5 } extent = 4, sizeof = 8
static_3[3] { 3 4 5 } extent = 3, sizeof = 8
참고 항목
span
을 생성합니다
(public member function) |
|
|
기본 연속 저장소에 직접 접근합니다
(public member function) |
|
|
요소의 개수를 반환합니다
(public member function) |