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 중국어 웹사이트의 기타 관련 기사를 참조하세요!