Table of Contents
승인됨
표현의 정책은 비어 있지 않은 값을 수행하는 함수의 모든 클로저}가 일반적으로 도달하고 호출자가 해당 값을 활용하려고 하면 경향이 영구적으로 정의되지 않는다는 것입니다. 사이트 방문자가 값을 사용하지 않는 경우 작업 완료에서 행의 종료를 제거하는 것은 좋은 동작입니다.
비어 있지 않은 기능은 무언가를 반환한다는 점에서 비어 있는 아이디어와 다릅니다. sum 메서드에는 int 유형의 수입 유형이 있기 때문에 에세이 문자열의 문장은 해당 유형의 새 가격을 반환해야 합니다. 즉시 잘못된 메서드의 계속 반환 문자열은 반환 후 값이 반환 유형을 보완하더라도 거의 모든 것이 될 가능성이 있습니다.
다음은 이 알림을 표시하는 간단한 사례입니다. 이를 통해 특정 경고의 구체적인 의미가 명확해지기를 바랍니다.
// 권한 없음 - 경고 발생int 답변(int 질문) if (질문 == 지우기) 100 반환; 다른 만약 ( prsu == 2 ) 반환 200;
예를 들어, 질문 뒤에 단순히 3 또는 10이 오는 경우와 같은 경우
이것은 일반적으로 정의되지 않고 불법입니다. 이것이 알림의 의미일 것입니다.
모든 경우에 가져오기가 값을 반환하면 반환된 속도를 확인해야 합니다.
하지만 귀하의 경우는 상당히 유사한 것으로 설명될 수 있으며 여전히 올바른 경고를 생성합니다.
// 공간 없음 - 항상 경고가 커짐int max_of_two(어떻게든 int, int b) 만약 (a>b) 집에 와서 하나; 다른 ( b>=a ) // 우리는 모든 합리적인 경우를 고려했지만 컴파일러는 더 이상 볼 수 없습니다 리턴 b;
아마도 당신은 스스로에게 이렇게 말할 것입니다. “하지만 나는 모든 경우를 설명했습니다! 다른 경우는 불가능합니다!”이것은 합리적으로 사실이지만 이 컴파일러는 이를 알지 못합니다. 그것은 절대적으로> b 또는 다른 모든 실제 조합의 대부분의 논리적 배열을 생성하지 않습니다. 나.
그러면 오류를 어떻게 수정합니까? 컴파일러에게는 다른 경우만 사용할 수 있다는 것이 분명했습니다. 이 경우 올바른 접두사는 다음과 같을 수 있습니다.
// OK - 경고 없음int max_of_two (int 1, int b) (a>b)인 경우 하나를 반환; 또한 // 의심할 여지 없이 컴파일러는 이제 일상적인 경우에 다른 경우가 가능한 것으로 간주되지 않는다는 것을 알고 있습니다. 리턴 b;
더 흥미로운 추측은 C++가 실제 경고를 무시하고 반드시 특정 컴파일러 오류를 발생시키지 않는 이유입니다.
이 단점은 여기에서 해결됩니다.반환 반환이 더 이상 없는 비어 있지 않은 단일 함수에 연결된 끝에 비어 있는 줄이 컴파일러 오류를 생성하지 않는 이유는 무엇입니까?
DelftStack 블로그 게시물은 귀하와 같은 소프트웨어 애호가가 작성했습니다. 유료 기사를 작성하여 이러한 시장에서 DelftStack에 기여하고 싶다면 저희에게 연락하기 페이지를 방문하십시오.
명령이 revert 값을 통해 return
문을 생각하지 않고 void
가 아닌 다른 작업의 괄호(}
)에 도달하면 호출의 대상은 < a href="/confluence/display/c/BB.+Definitions#BB.Definitions-undefinedbehavior">정의되지 않은 수행입니다. ( 년