2010-05-25 3 views
6

그들은 매우 다른 종류의 언어이며 예외 처리 방식은 다소 다를 수 있습니다. 예외 처리는 어떻게 구현되며 이러한 언어의 구현 차이점은 무엇입니까?C++, Java 및 JavaScript 예외 처리의 차이점은 무엇입니까?

나는 C++ 예외 처리가 JavaScript 버전에 비해 매우 느린 것으로 보였기 때문에이 질문을하고 있습니다.

+1

C++ - 플랫폼과 어떤 컴파일러에? – kennytm

+0

답변을 한 후에야 깨달았습니다. Java가 스택 트레이스를 구성하고 실패 경로 또는 더 높은 수준의 답변을 얻는 것과 같은 저수준 세부 정보를 구현하면 어떻게됩니까? – Esko

+1

어떻게 C++ 예외 처리가 JavaScript보다 느릴 수 있습니까? 어떤 브라우저에서 어떤 플랫폼에서 어떤 코드를 실행하고 어떤 컴파일러와 비교하여 어떤 플랫폼에서 어떤 코드를 컴파일합니까? – Puppy

답변

1

나는 C++ 예외 처리의 단지 기본을 알고 있지만 C에서 당신이 할 수있는 ++ 동안 최대한 멀리 볼 수, 자바는 예외 Object excplicit 기반 계층 구조 (Throwable, Exception, RuntimeException, Error)가

try 
{ 
    throw 1337; 
} 
catch (int i) 
{ 
    // i == 1337 
} 

이것은 물론 클래스 구조 및 일반적인 예외 처리 정책의 디자인에 반영됩니다.

다른 차이점은이 겉으로보기에는 사소한 차이로 인해 C++에는 실제로 런타임 예외 () int 또는 다른 기본 유형을 예외로 호출하지 않으려는 경우 명시 적으로 예외를 작성하지 않고 언제든지 아무 것도 던질 수 있음을 의미하는 자바 세계에서 값).

마지막으로 Java의 예외와 비교할 때 C++ 예외는 이 아니며 기본적으로에는 Java의 스택 트레이스와 비슷한 내용이 포함되어 있지 않습니다.

+0

C++에서는 std :: except – Nikko

+0

에서 파생 된 클래스를 JavaScript에서도 사용하는 것이 좋습니다. 미리 정의 된 Error 객체 외에는 아무 것도 throw 할 수 없습니다. 그것은 단지 질문 일뿐입니다. 얼마나 유용한 지요. – Dormilich

1

이러한 예외가 내부적으로 어떻게 생성되는지 묻는다면 꽤 복잡한 문제입니다.

하나의 접근법 (나는 C++과 Java를 사용한다고 생각하는데 자바 스크립트에 대해 모른다)은 오류 처리기 스택을 유지하는 것입니다. 예외가 발생하면 최상위 항목이 스택에서 팝 아웃되고 적절하게 예외를 처리하거나 핸들러가 처리 할 수없는 경우 상위 처리기가 OutOfBoundException 인 경우 NullPointerException을 수신하는 등 스택에서 다른 항목을 팝합니다.

+0

이 전략 (핸들러 스택)은 들어 본 자바 구현에서 사용되지 않습니다. –

관련 문제