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

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

Linda Hamilton
풀어 주다: 2024-12-03 08:18:18
원래의
316명이 탐색했습니다.

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

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

정수 매개변수를 기대하지만 다른 유형의 암시적 캐스팅을 허용하는 비구성 함수를 고려하세요. 문자, 부울, Long과 같은 것입니다. 이러한 의도하지 않은 동작을 방지하고 함수가 지정된 유형의 매개변수만 허용하도록 하려면 다음 기술을 사용할 수 있습니다.

C 11 이상 방법:

가장 직접적인 접근 방식은 다른 모든 유형과 일치하는 함수 템플릿을 정의하는 것입니다.

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

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

직접 일치하는 비템플릿 함수가

C 11 이전 기술:

C 11 이전에는 원하는 동작을 시행하기 위해 도우미 클래스를 만드는 대체 솔루션이 있었습니다.

// 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에서는 이 상황을 처리하는 더 간결하고 유익한 방법을 소개합니다.

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");
} 
로그인 후 복사

내에서 static_assert 사용 함수 템플릿은 예상치 못한 매개변수 유형으로 함수를 호출할 때 명확한 오류 메시지를 제공합니다.

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

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