C11에서는 삭제된 함수가 완전히 지워지지 않고 대신 오버로드 해결에 참여한다. 이 기능은 두 가지 주요 목적을 제공합니다.
암시적 변환 방지
"= delete" 구문의 유용성 중 절반은 호출자가 특정 매개변수를 사용하여 특정 함수를 호출하지 못하도록 방지하는 데 있습니다. 유형. 그 목표는 특정 시나리오에서 암시적 변환을 방해하는 것입니다. 특정 오버로드를 허용하지 않으려면 오버로드 해결에 참여해야 합니다.
명시적 호출 보장
"= delete" 구문이 함수를 완전히 지우는 경우, 이는 본질적으로 선언을 완전히 생략하는 것과 동일하게 만듭니다. 이는 다음과 같은 시나리오를 허용합니다:
onlydouble val(20); // Legal in C++
컴파일러는 모든 생성자를 고려하고 이중 매개변수를 위한 생성자를 호출할 수 있는 암시적 변환을 식별합니다.
반대로, "= 오버로드 해결에 참여하는 삭제:
onlydouble val(20); // Error in C++
컴파일러는 삭제된 생성자를 포함하여 모든 생성자를 평가합니다. 정수 리터럴과 정확히 일치하는 항목을 발견하고 삭제된 함수를 호출하려고 시도했기 때문에 오류가 발생합니다.
"= 삭제" 역할 설명
" = 삭제" 구문은 단순히 "이것은 존재하지 않습니다"가 아니라 "이것을 금지합니다"를 의미합니다. 이는 구체적인 의미를 담고 있는 더욱 강력한 진술입니다. "이것은 존재하지 않습니다"에 대한 별도의 구문은 필요하지 않습니다. 왜냐하면 선언을 생략함으로써 이미 암시되어 있기 때문입니다.
드문 경우지만, 존재하지 않는다는 것을 나타내는 명확한 방법이 없기 때문에 특정 규칙 모호성이 발생할 수 있습니다. 복사 생성자가 존재하지 않습니다. 그러나 복사 생성자와 같은 특수 생성자는 클래스에 고유합니다. 존재하지 않음을 표시하기보다는 이를 호출하는 것이 적법한지 여부가 문제입니다.
결론
C 11에서 삭제된 함수는 오버로드 해결에 참여하여 오류 보고를 명확하게 하고 명시적인 함수 호출을 시행합니다. 이를 통해 개발자는 모호하고 의도하지 않은 변환을 방지하고 프로그램의 정확성과 명확성을 보장할 수 있습니다.
위 내용은 C 11에서 삭제된 함수가 과부하 해결에 참여하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!