기존 개체에 새 값을 할당할 때 복사 생성자가 우회되는 이유
제공된 코드 조각에서 개체 a는 다음으로 초기화됩니다. 값은 5입니다. 표준 A 생성자가 예상대로 호출됩니다. 그러나 가정과 달리 새로 생성된 객체를 할당할 때 복사 생성자는 호출되지 않습니다.
이 동작은 컴파일러 최적화의 결과도 아니고 언어 사양의 누락도 아닙니다. 이는 C 표준(§12.8.15, 페이지 211)에 명시적으로 문서화되어 있습니다. 표준에서는 다음 할당이 의미상 동일하다는 것이 "완전히 허용 가능"하다고 명시합니다.
T = x; T(x);
논리적으로 T(T(x))와 같은 중복 할당은 코드 최적화에서 제거될 수 있습니다. . 따라서 컴파일러는 자동으로 기본 생성자를 호출하여 a를 초기화한 다음 새로 생성된 객체를 직접 할당합니다.
복사 생성자를 강제로 호출하려면 할당하기 전에 명시적으로 기본 생성 a를 생성해야 합니다.
A a; // Default-construct 'a' // Copy constructor will be called to // copy data from the newly constructed object. a = A(5);
위 내용은 C에서 기존 개체에 할당할 때 복사 생성자가 호출되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!