> 백엔드 개발 > C++ > C에서 ODR 사용이란 무엇이며 언제 정의가 필요합니까?

C에서 ODR 사용이란 무엇이며 언제 정의가 필요합니까?

Patricia Arquette
풀어 주다: 2024-12-06 12:05:15
원래의
705명이 탐색했습니다.

What is ODR-Use in C   and When is a Definition Required?

C의 "odr-use" 이해

C에서는 "단일 정의 규칙"(ODR) 개념이 여러 컴파일 단위로 선언된 엔터티에는 정의가 하나만 존재합니다. 그러나 정의가 필요한 시기를 결정하는 것은 혼란스러울 수 있습니다. "odr-use"라는 용어는 이러한 맥락에서 사용됩니다.

C 표준에 따르면 변수나 함수는 odr-used입니다.

  • 해당 이름이 잠재적으로 평가된 표현식이며 상수 표현식 평가에 적합한 객체가 아닙니다.
  • 오버로드되지 않은 함수의 경우 해당 이름이 잠재적으로 평가된 표현식 또는 오버로드 해결에 의해 선택된 후보 함수 집합에서.

이 정의는 약간 추상적이므로 단순화하겠습니다. Odr-use는 본질적으로 엔터티가 프로그램 어딘가에 정의되어야 하는 방식으로 사용된다는 것을 의미합니다. 여기에는 함수 호출이나 변수 액세스와 같은 실제 사용법뿐만 아니라 오버로드 해결 후보와 같은 잠재적인 사용법도 포함됩니다.

클래스 템플릿 멤버 함수의 경우 인스턴스화( 따라서 정의됨) Odr-사용되는 경우. 이는 호출되어야 하거나 클래스 자체가 해당 멤버 함수가 가상인 상태로 인스턴스화되어야 함을 의미합니다.

표준에서는 불필요한 인스턴스화를 방지하기 위해 이 원칙을 사용합니다. 예를 들어, std::list::sort 함수에는 연산자< 그 요소에. 연산자를 지원하지 않는 요소 유형으로 목록을 선언하면 sort가 호출되지 않는 한 멤버 함수가 인스턴스화되지 않습니다.

누락과 관련된 오류를 피하려면 odr-use를 이해하는 것이 중요합니다. 여러 컴파일 단위의 정의 및 여러 정의. 이러한 규칙을 따르면 프로그래머는 강력하고 유지 관리가 가능한 C 코드를 작성할 수 있습니다.

위 내용은 C에서 ODR 사용이란 무엇이며 언제 정의가 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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