2012-03-30 4 views

답변

3

이론적으로는 컴파일러가 구현하는 언어의 버전에 따라 다르지만 실제로는 하나의 복사본이 있습니다.

string(str1)str1 사본을 임시로 생성하려고합니다.

C++ 98/03에서 컴파일러는 이론적으로 복사 초기화를 사용하여 임시적으로 str2을 초기화하므로 이론적으로 두 번째 복사본이 그 시점에서 만들어집니다. 실제로, 복사 작업 중 하나를 제거하지 않는 컴파일러를 찾는 것은 어려울 것입니다 (적어도 최적화가 가능하다면).

C++ 11에서 std::stringstr2을 초기화하는 데 사용되는 이동 생성자 (rvalue 참조를 사용하는 이동 생성자)가 있으므로 두 번째 복사본이 이론적으로는 발생하지 않아야합니다.

9

기술적으로 2 개의 사본이있을 수 있지만 실생활에서는 단지 1 개의 사본 만하고 있습니다. 즉, 컴파일러는 임시가 필요하지 않으며 사본을 최적화하는 것을 알게됩니다.

관련 문제