C++ named requirements: TriviallyCopyable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
참고: 표준에서는 이 이름의 명명된 요구 사항을 정의하지 않습니다. 이는 핵심 언어에 의해 정의된 타입 범주입니다. 일관성을 위해서만 명명된 요구 사항으로 여기에 포함되었습니다.
목차 |
요구사항
다음 타입들을 총칭하여 trivially copyable types 라고 합니다:
- 스칼라 타입
- 간단히 복사 가능한 클래스 타입
- 해당 타입들의 배열
- 이러한 타입들의 cv 한정 버전
참고 사항
일반적으로, 모든 trivially copyable 타입
T
와
T
의 객체
obj1
에 대해,
obj1
의 기본 바이트들은
char
배열이나
unsigned
char
, 또는
std::byte
(since C++17)
배열로 복사되거나,
T
의 별개 객체인
obj2
로 복사될 수 있습니다.
obj1
과
obj2
모두 potentially-overlapping subobject일 수 없습니다.
obj1
의 기본 바이트를 그러한 배열에 복사한 다음, 그 결과 내용을 다시
obj1
으로 복사하면,
obj1
은 원래 값을 유지할 것입니다.
obj1
의 기본 바이트를
obj2
로 복사하면,
obj2
는
obj1
의 값을 가지게 됩니다.
기본 바이트는 std::memcpy 또는 std::memmove 를 사용하여 복사할 수 있으며, 이는 활성 volatile 객체가 접근되지 않는 한 가능합니다.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 1734 | C++11 | 삭제된 비트리비얼 할당 연산자를 가진 C++03 POD는 trivial하지 않았음 | 삭제된 생성자/연산자 허용 |
| CWG 2094 | C++11 | volatile 스칼라 타입은 trivially copyable하지 않았음 ( CWG 1746 ) | trivially copyable로 변경 |
참고 항목
|
(C++11)
|
타입이 trivially copyable인지 확인합니다
(클래스 템플릿) |