에서 볼. 한 번에 한 가지 ... 활성 예외 O를
throw;
문이 현재 잡힌 예외를 다시 던질하는 데 사용됩니다/w
1. 다시 던진다 사용. 예를 들어 : 귀하의 경우
try {
do_something();
} catch (const std::exception &) {
throw; // This statement re-throws an exception that was caught in this "catch" block.
}
, 당신은 예외를 잡기없이 throw;
을 사용하는 (주문 단어 -가 직접 또는 간접적으로 catch
블록 내부에 표시되지 않습니다), 따라서 프로그램이 종료됩니다. 예외를 throw 할 필요가 있고 예외를 다시 throw하지 않을 경우, 예외 오브젝트를 지정해야합니다. 예를 들어 :
throw std::runtime_error("Something bad happened");
2. 포괄하지 않습니다 절 ++
이
귀하의 포괄 절 (catch (...)
)이 완벽하게 합법적 C하다 잡힌 예외 다시는-던져. 그러나 catch 된 예외는 다시 throw되지 않습니다. 합법적 인 C++ 코드이지만 이러한 사용법은 금기 사항입니다. C 및 C++ 런타임은 일반적으로 특정 기능을 구현하기 위해 특수 유형의 예외를 사용합니다. 예를 들어, NPTL은 예외를 사용하여 스레드 취소를 구현합니다. catch (...)
을 사용하여 해당 예외를 잡으면 스레드가 취소되지 않고 나쁜 시간을 보게됩니다. 일반적으로 예외를 예외로 catch해야합니다.거의 모든 경우 예외는 std::exception
에서 상속되므로 catch (const std::exception &)
이나 정확한 유형을 알아 내려는 경우 -으로 작성해야합니다. 그러나 캐치 올을 사용해야하는 경우 다시 던지십시오. 예를 들어 :
try {
do_something();
} catch (...) {
throw; // DO NOT FORGET TO RE-THROW.
}
3. 헤더는 C++ 표준 C의 기능에 대한 자신의 헤더를 제공하는 반면 당신은 C 헤더를 포함하는 ...
의 이름을 지정. 그래서, 헤더 :
#include <stdio.h>
.. 있어야한다 :
#include <cstdio>
C++ 특정 C 함수는 특별한 치료를받을. 예를 들어, std
네임 스페이스에서 사용할 수 있습니다. 따라서 open()
또는 ::open()
대신 std::open()
을 사용할 수 있습니다. 별거 아니지만,가는 것이 좋습니다.
4. 메인에서 돌아 가기.
C와 달리 C++의 main()
기능은 매우 특별합니다. 그것은 당신이 return 0;
을 갖지 못하게합니다. 이는 기본 동작입니다. 따라서 어떤 값을 반환해야 할 필요가 없다면 return 0;
을 입력하지 않고 시간을 절약 할 수 있습니다. 그러나 main
은 그와 같은 유일한 함수이며 함수가 void
으로 표시되지 않는 한 어디에서나 명시 적으로 반환해야한다는 것을 기억하십시오.
희망이 있습니다. 행운을 빕니다! 예외가 발생하는
++ 당신이 선택의 언어로 C++을 선택하면 _ ish_, 단지 C++ 코드에 익숙해, 코드가 쉽게 될 수있는이 방법 : 예를 들어
어떤 유익도없이 언어가 이상하게 혼합되어있어 새롭고 유용한 것을 배우지 않고 삶을 더 열심히 할 수 있습니다. C가 문제없이 C++에서 지원된다는 것은 사실이지만, 코딩 할 때보다 단순하고 훨씬 더 선형적인 접근 방식을 시도하십시오. – Ken