> 백엔드 개발 > C++ > C 98과 C 11 사이의 자동 이동 작업 생성 규칙은 어떻게 다릅니까?

C 98과 C 11 사이의 자동 이동 작업 생성 규칙은 어떻게 다릅니까?

Linda Hamilton
풀어 주다: 2024-11-29 05:32:16
원래의
1005명이 탐색했습니다.

How Do Automatic Move Operation Generation Rules Differ Between C  98 and C  11?

자동 이동 연산 생성 규칙

C 98에서 컴파일러는 멤버별 복사를 통해 복사 생성자와 복사 할당 연산자를 자동으로 생성할 수 있었습니다. 이 프로세스는 이동 의미론의 도입으로 C 11로 확장되었습니다. 그러나 이동 작업의 자동 생성 규칙은 복사 작업의 규칙과 다릅니다.

Howard Hinnant의 ACCU 2014 프레젠테이션에서는 이러한 규칙에 대한 간략한 개요를 제공합니다. 다음 표에는 핵심 사항이 요약되어 있습니다.

</p>
<table>
<thead><tr>
<th> </th>
<th>Destructor</th>
<th>Move Constructor</th>
<th>Move Assignment Operator</th>
</tr></thead>
<tbody>
<tr>
<td>C  98/03</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>C  11 (Defect Report 1492)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>C  11 Final</td>
<td>Yes</td>
<td>Yes<sup>*</sup>
</td>
<td>Yes<sup>*</sup>
</td>
</tr>
</tbody>
</table>
<p>

예: 자동으로 생성됩니다.
아니요: 자동으로 아님 생성됩니다.

*그러나 암시적으로만 정의됩니다(선언되지 않거나 선언되지 않음=기본값). 명시적 정의는 생성을 억제합니다.

이러한 규칙은 이동 생성자와 이동 할당 연산자가 일반적으로 C 11에서 자동으로 생성되지만 그렇지 않은 경우도 있음을 나타냅니다. 예를 들어 소멸자가 명시적으로 정의된 경우 이동 작업이 생성되지 않습니다. 마찬가지로 이동 작업 자체를 명시적으로 정의하면 자동 생성이 억제됩니다.

위 내용은 C 98과 C 11 사이의 자동 이동 작업 생성 규칙은 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿