>백엔드 개발 >C++ >C 템플릿 매개변수 추론이 생성자와 작동하지 않는 이유(C 17까지)?

C 템플릿 매개변수 추론이 생성자와 작동하지 않는 이유(C 17까지)?

DDD
DDD원래의
2024-11-29 17:11:11757검색

Why Doesn't C   Template Parameter Inference Work with Constructors (Until C  17)?

C가 생성자에서 템플릿 매개변수를 추론할 수 없는 이유는 무엇입니까?

C를 사용하면 컴파일러가 함수 매개변수에서 템플릿 매개변수를 추론할 수 있으므로 간결하고 유형이 안전한 코드가 가능합니다. 그러나 클래스 생성자에는 이 기능을 사용할 수 없습니다. 왜 그럴까요?

예제 코드에서는 생성자가 클래스의 유일한 진입점이 아니기 때문에 컴파일러는 Variable에 대한 템플릿 매개변수를 추론할 수 없습니다. 복사 생성자와 할당 연산자는 객체를 생성하고 수정하는 대체 방법을 제공합니다.

다음 시나리오를 고려하십시오.

MyClass m(string s);
MyClass *pm;
*pm = m;

이 경우 컴파일러는 객체에 어떤 템플릿 유형이 필요한지 알 수 없습니다. 마이클래스 오후. 생성자에 전달된 인수에서 유형을 추론하는 것은 가능하지만 할당이 포함되면 불확실해지기 때문에 의도한 유형을 결정하기가 어렵습니다.

또한 유형 추론이 바람직하지 않은 경우가 있을 수 있습니다. 예를 들어, 클래스에는 다양한 목적으로 다양한 유형을 허용하는 생성자가 있을 수 있습니다. 템플릿 유형을 추론하면 클래스 인터페이스에 의도하지 않은 제약이 적용될 수 있습니다.

C 17 개발

C 17에서는 생성자 인수에서 유형 추론을 도입할 것으로 예상된다는 점에 주목할 필요가 있습니다. 이렇게 하면 다음 구문이 활성화됩니다.

std::pair p(2, 4.5);
std::tuple t(4, 3, 2.5);

그러나 유형 추론은 편리한 기능이며 항상 적합하지 않을 수 있다는 점을 기억하는 것이 중요합니다. 제한 사항 뒤에 있는 이유를 이해하면 개발자가 강력하고 유지 관리가 가능한 C 코드를 작성하는 데 도움이 됩니다.

위 내용은 C 템플릿 매개변수 추론이 생성자와 작동하지 않는 이유(C 17까지)?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.