는 다음과 나는 다음과 같은 출력복사 생성자 대신 전달 참조 생성자가 호출되는 이유는 무엇입니까?
Something()
Something()
Something(SomethingType&&)
왜 복사 생성자가 템플릿 전달 참조 생성자에 해결되고 얻을 코드
#include <iostream>
using namespace std;
template <typename Type>
struct Something {
Something() {
cout << "Something()" << endl;
}
template <typename SomethingType>
Something(SomethingType&&) {
cout << "Something(SomethingType&&)" << endl;
}
};
int main() {
Something<int> something_else{Something<int>{}};
auto something = Something<int>{};
Something<int>{something};
return 0;
}
아니라 이동 생성자를 감안할 때? 이동 생성자가 암시 적으로 정의되었지만 복사 생성자가 아니라는 점을 짐작하고 있습니다. 그러나 복사 생성자가 스택 오버플로에서 암시 적으로 정의되지 않은 경우를 읽은 후에도 여전히 혼란 스럽습니다.
이것은 매우 일반적인 블로그 주제입니다. https://akrzemi1.wordpress.com/2013/10/10/too-perfect-forwarding/ – chris