, 그것은 말한다 :생성자 또는 복사 생성자? 책 <em>일반 프로그래밍과 STL</em> (중국어판)에서
X x = X()
는 복사 생성자를 호출합니다.
나에게는 조금 이상합니다. 그리고 나는 이와 같은 테스트 프로그램을 작성한다.
#include <iostream>
class Test {
public:
Test() {
std::cout << "This is ctor\n";
}
Test(const Test&) {
std::cout << "This is copy-ctor\n";
}
};
int main(int argc, char** argv)
{
Test t = Test();
return 0;
}
결과는 "This is ctor"이다. 좋아, 이제 혼란 스럽네. 맞지?
gcc에서 '-O0'이라도 elision을 막지 못하기 때문에'-fno-elide-constructors'를 사용해야 할 수도 있습니다. –
@Kerrek : 감사합니다! –
* 사소한 *이 아니더라도 복사본을 생략 할 수 있습니다. 로컬 변수 대신 임시를 생성하여 복사본을 생략합니다. 객체 또는 사본의 복잡성은 최적화와 관련이 없습니다. –