>백엔드 개발 >C++ >C는 언제 복사 생성자를 건너뛰나요?

C는 언제 복사 생성자를 건너뛰나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-21 08:10:10186검색

When Does C   Skip the Copy Constructor?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.