로컬 변수를 반환하면 복사본이 반환되고 원본이 삭제됩니까(NRVO)?
C 17에서 최적화가 활성화된 경우(구체적으로 , 명명된 반환 값 최적화 또는 NRVO), 지역 변수를 반환하는 데는 원본 개체 복사가 포함되지 않습니다. 대신, 컴파일러는 코드를 최적화하여 반환된 객체를 복사될 스토리지에 직접 구성합니다. 이는 원래 객체가 반환 값 위치로 효과적으로 이동되고 소멸자가 호출되지 않음을 의미합니다.
그러나 최적화가 비활성화된 경우(-fno-elide-constructors 플래그 사용) 기본 동작을 따릅니다. :
제공한 코드에서:
test function() { test i(8); return i; }
NRVO가 활성화되면 하나의 생성자만 및 소멸자 호출이 관찰되어 원래 i 객체가 복사되지 않고 반환 값 위치로 이동되었음을 나타냅니다.
NRVO가 비활성화되면 원본 i 객체와 반환 값 객체 모두에 대해 생성자 및 소멸자 호출이 모두 관찰됩니다. 이는 원본 i 객체가 복사된 다음 소멸됨을 나타냅니다.
따라서 질문에 대한 대답은 다음과 같습니다. 또는 최적화가 활성화되지 않았습니다. NRVO가 활성화되면 지역 변수를 반환해도 복사본이 반환되지 않으며 원본이 삭제되지 않습니다. NRVO가 비활성화되면 복사본을 반환하고 원본을 파기합니다.
위 내용은 C 17에서 지역 변수를 반환하면 복사본을 반환하고 원본을 삭제합니까(NRVO)?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!