> 백엔드 개발 > C++ > 본문

불완전한 유형은 표준 컨테이너 인스턴스화에 대한 정당한 주장입니까?

Barbara Streisand
풀어 주다: 2024-11-05 07:19:02
원래의
564명이 탐색했습니다.

Are Incomplete Types Legitimate Arguments for Standard Container Instantiation?

불완전한 유형이 표준 컨테이너를 향상시킬 수 있습니까?

재귀적 데이터 구조를 추구하면서 개발자는 종종 불완전한 유형으로 표준 컨테이너를 인스턴스화하는 데 의존합니다. 그러나 불완전한 템플릿 인수 사용에 대한 표준의 제한된 지침으로 인해 이러한 구성의 합법성에 대한 논쟁이 있었습니다.

이 문제는 §17.6.4.8 [lib.res.on.functions]의 한 구절에서 비롯됩니다. 표준에서는 해당 구성 요소에 명시적으로 허용되지 않는 한 템플릿 구성 요소를 인스턴스화할 때 불완전한 유형을 템플릿 인수로 금지합니다. 이는 다음과 같은 구문의 유효성에 대한 의문을 제기합니다.

<code class="cpp">struct multi_tree_node {
    std::vector< multi_tree_node & > child;
};</code>
로그인 후 복사

이러한 구문은 실제로는 원활하게 작동하는 경우가 많지만, 불완전한 유형 인스턴스화에 대한 표준의 침묵으로 인해 해당 합법성에 대한 의문이 제기되었습니다.

그러나 자세히 조사해 보면 불완전한 유형에 대한 표준의 제한이 주로 §17.6.4.8의 맥락에서 함수를 참조하는 "유형에 대한 연산..."에 적용된다는 사실이 드러났습니다. 컨테이너 인스턴스화에는 멤버 정의 내의 함수 실행이 포함되지 않으므로 인스턴스화 자체는 표준의 금지 사항을 위반하지 않을 수 있습니다.

이 해석은 불완전한 유형 인수를 명시적으로 허용하는 std::unique_ptr의 존재로 지원됩니다. 블록 범위에서도 마찬가지입니다. 또한 "작은 벡터"와 같은 최적화 기술의 효율적인 구현과 관련하여 불완전한 유형 인스턴스화를 금지하는 표준의 근거는 컨테이너 인스턴스화에 적용되지 않습니다.

따라서 표준에서는 불완전한 유형을 다음과 같이 사용하는 것을 권장하지 않습니다. 템플릿 구성 요소를 인스턴스화할 때 인수를 생성할 때 불완전한 유형의 표준 컨테이너를 인스턴스화하는 적법성은 여전히 ​​모호합니다. 그러나 표준에서 추가 설명이 제공될 때까지 이러한 구성에 주의를 기울이는 것이 좋습니다.

위 내용은 불완전한 유형은 표준 컨테이너 인스턴스화에 대한 정당한 주장입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿