질문자의 의미는 0을 매개변수로 초기화할 수 있으면 0으로 초기화를 시도하고, 작동하지 않으면 기본 생성자를 사용하라는 것입니다.
으아악
여기에 몇 가지 점이 있습니다. 하나는 스칼라 유형이 초기화되지 않고 스택의 가비지 데이터를 직접 사용하므로 해당 데이터가 0이 아니기 때문에 직접 T tmp할 수 없다는 것입니다. 둘째, C 객체는 기본적으로 메모리 할당을 위해 구성되는 경우가 많기 때문에 C 메서드 memset를 사용할 수 없습니다. 포인터가 0으로 설정되면 분할 오류나 메모리 누수가 발생합니다. 셋째, 객체를 직접 반환하기 때문에 T에 이동 생성자가 없으면 성능이 저하될 수 있습니다.
위 작성방식의 원리는 이렇습니다. Int와 int의 차이점을 활용하면 C 에서는 템플릿 결정을 내릴 때 보다 전문화된 함수(또는 오버로드된 함수)에 우선 순위를 부여하므로 다음 init_obj이 위의 것보다 우선합니다. Enable은 0으로 초기화할 수 없는 유형에 대한 파생 오류를 생성하는 데 사용됩니다. C 의 SFINAE 정책은 이를 위의 유형으로 전송합니다. init_obj; 여기서는 정수 유형이 암시적으로 포인터로 변환되지만 float는 그렇지 않기 때문에 0.f가 사용됩니다. 그리고 float는 암시적으로 모든 숫자 유형으로 변환될 수 있습니다.
C 11의 균일한 초기화:
으아악글을 쓰기 전에:
으아악@시히라
으아악질문자의 의미는 0을 매개변수로 초기화할 수 있으면 0으로 초기화를 시도하고, 작동하지 않으면 기본 생성자를 사용하라는 것입니다.
으아악여기에 몇 가지 점이 있습니다. 하나는 스칼라 유형이 초기화되지 않고 스택의 가비지 데이터를 직접 사용하므로 해당 데이터가 0이 아니기 때문에 직접
T tmp
할 수 없다는 것입니다. 둘째, C 객체는 기본적으로 메모리 할당을 위해 구성되는 경우가 많기 때문에 C 메서드memset
를 사용할 수 없습니다. 포인터가 0으로 설정되면 분할 오류나 메모리 누수가 발생합니다. 셋째, 객체를 직접 반환하기 때문에 T에 이동 생성자가 없으면 성능이 저하될 수 있습니다.위 작성방식의 원리는 이렇습니다. Int와 int의 차이점을 활용하면 C 에서는 템플릿 결정을 내릴 때 보다 전문화된 함수(또는 오버로드된 함수)에 우선 순위를 부여하므로 다음
init_obj
이 위의 것보다 우선합니다. Enable은 0으로 초기화할 수 없는 유형에 대한 파생 오류를 생성하는 데 사용됩니다. C 의 SFINAE 정책은 이를 위의 유형으로 전송합니다.init_obj
; 여기서는 정수 유형이 암시적으로 포인터로 변환되지만 float는 그렇지 않기 때문에0.f
가 사용됩니다. 그리고 float는 암시적으로 모든 숫자 유형으로 변환될 수 있습니다.개인적으로 제 글이 보기 흉한 것 같아서 좀 더 나은 글쓰기를 부탁드리고 싶습니다(
C 11의 경우 위의 작성 방법이 좋습니다 :)