이미 Bathsheba에서 언급했듯이, void가 아닌 함수의 끝에서 벗어난 것은 실제로 정의되지 않은 동작입니다. 이것이 오류가 아니라 경고 인 이유는 이것이 결코 발생하지 않는다는 것을 증명할 수 있다는 것입니다. 예를 들어, 다음을 고려하십시오.
이제 함수 사용자가 주석을주의 깊게 읽으면 제대로 작동합니다. 이것은 분명히 위험한 일이므로 컴파일러는 경고하지 말라고 경고합니다.
편집 : MSalters 언급했듯이 클래스 불변 함수를 잘못 사용되지 않습니다 보장 할 수 있기 때문에, 이것은 개인 멤버 함수 덜 위험하다 .
이
// Every member function of SomeClass makes sure
// that i_ is in the legal range when it's done
class SomeClass {
public:
SomeClass() : i_{27} {}
// Possibly more public or private functions that all make sure i_ stays valid
private:
bool foo() {if (i_ > 3) return true;}
int i_;
};
이제 (클래스 테이너로) i_
항상 항상 잘 작동합니다 적어도 4
및 foo
있는지 확인 할 수 있습니다 : 예를 생각해 보자. 개인적으로는 유지 보수성과 가독성을 손상시킬 수 있기 때문에 여전히이를 피할 것이지만 지금은 "만" 모든 클래스 관리자는이 불변성에 대해 걱정할 필요가 있기 때문에 무료 버전보다 낫습니다/실수를 할 수 있습니다.
실제로 컴파일러가 오류로 승격시켜야하는 경고 중 하나입니다. – Bathsheba
적어도 하나의 용도가 있습니다. 이 질문에 대한 영감은이 질문에 대한 대답이었습니다. http://stackoverflow.com/questions/27011345/generate-mangled-names-from-source-code?noredirect = 1 # comment42549548_27011345 – Praxeolitic