C의 복사 생성자 최적화
C에서는 특정 상황에서 복사 생성자가 호출되지 않아 컴파일러 최적화 또는 문서화되지 않은 언어 기능.
다음 사항을 고려하세요. code:
class A { public: A(int value) : value_(value) { cout << "Regular constructor" << endl; } A(const A& other) : value_(other.value_) { cout << "Copy constructor" << endl; } private: int value_; }; int main() { A a = A(5); }
출력에 "일반 생성자" 메시지와 "생성자 복사" 메시지가 모두 포함될 것으로 예상할 수 있습니다. 그러나 이 경우 복사 생성자는 절대 호출되지 않습니다.
이 동작은 컴파일러 최적화도 아니고 C의 문서화되지 않은 기능도 아닙니다. 대신 C 표준(§12.8.15)에는 T = x; T(x);로 해석될 수 있으며, 복사가 필요하지 않을 때 내부 T를 효과적으로 제거합니다.
이 특별한 경우 컴파일러는 A 객체를 생성한 다음 이를 복사하는 것이 중복된다는 것을 인식합니다. 따라서 복사 생성자 호출을 생략합니다.
복사 생성자의 호출을 강제하려면 첫 번째 A 객체를 명시적으로 생성할 수 있습니다.
A a; // Construct an empty A object a = A(5); // Copy-initialize it with another A object
위 내용은 C는 언제 복사 생성자를 건너뛰나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!