> 백엔드 개발 > C++ > 비구성 C 함수에서 암시적 유형 변환을 방지하려면 어떻게 해야 합니까?

비구성 C 함수에서 암시적 유형 변환을 방지하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-06 10:26:11
원래의
1075명이 탐색했습니다.

How Can I Prevent Implicit Type Conversions in Non-Constructing C   Functions?

비구성 함수에서 암시적 변환 방지

제공된 코드에서 function 함수는 정수 매개변수를 허용하도록 선언됩니다. 그러나 암시적 캐스팅으로 인해 실수로 문자, 부울 및 long 값도 허용합니다. 이러한 바람직하지 않은 동작을 방지하기 위해 우리는 엄격한 유형 일치를 적용하고 암시적 변환을 금지하는 방법을 모색합니다.

함수 템플릿을 사용하여 유형 불일치 적용

암시적 변환을 방지하는 한 가지 접근 방식은 함수 템플릿을 정의하는 것입니다. 원하는 유형을 제외한 모든 유형과 일치합니다. 예를 들어, 다른 유형에 대한 템플릿을 생성하고 삭제된 것으로 표시하여 컴파일을 효과적으로 금지할 수 있습니다.

void function(int); // this will be selected for int only

template<class T>
void function(T) = delete; // C++11
로그인 후 복사

이런 방식으로 직접 일치하는 비템플릿 함수(이 경우 void 함수) (int)는 정수에 대해 항상 선택됩니다. 다른 유형으로 함수를 호출하려고 하면 삭제된 템플릿으로 인해 오류가 발생합니다.

삭제 오버로드를 사용한 C 11 이전 접근 방식

C 11 이전에는 다른 방법이 필요했습니다. 암시적 변환 없이 유형 엄격한 함수 호출을 달성합니다. 여기에는 DeleteOverload 클래스를 생성하고 이를 사용하여 원하지 않는 유형에 대한 오버로드 선택을 비활성화하는 작업이 포함되었습니다.

// because this ugly code will give you compilation error for all other types
class DeleteOverload
{
private:
    DeleteOverload(void*);
};

template<class T>
void function(T a, DeleteOverload = 0);

void function(int a)
{}
로그인 후 복사

C 23 유형 제약 조건 적용을 위한 정적 어설션

C 23은 보다 사용자 친화적인 static_assert(false, msg)를 사용하여 접근합니다. 이를 통해 유형 불일치 시 더 명확한 오류 메시지를 표시할 수 있습니다.

void function(int) {} // this will be selected for int only

template<class T>
void function(T) {
    // since C++23
    static_assert(false, "function shall be called for int only");
}
int main() {
    function(1);
    // function(1l);
    // ^^^^^^^^^^^^ produces error:
    // error: static assertion failed: function shall be called for int only
}
로그인 후 복사

결론

이러한 기술을 사용하면 비구성 함수에서 암시적 변환을 방지하여 더 엄격한 유형 검사를 보장하고 잠재적인 오류를 제거할 수 있습니다. 의도하지 않은 유형 불일치로 인해 발생했습니다.

위 내용은 비구성 C 함수에서 암시적 유형 변환을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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