Program Tip

Qt가 예외 처리를 사용하지 않는 이유는 무엇입니까?

programtip 2020. 11. 15. 11:38
반응형

Qt가 예외 처리를 사용하지 않는 이유는 무엇입니까?


저는 Qt가 표준의 거의 모든 C ++ 기능을 훌륭하고 혁신적인 방식으로 사용하기 때문에 항상 궁금했습니다. 그리고 특정 기능을 사용하지 않을 때마다 그렇게하지 않는 데는 완벽하게 타당하고 적용 가능한 이유가 있습니다. 이 경우 Qt 클래스가 throw키워드와 throw예외를 사용하지 않는 이유는 무엇입니까? try ... catchQt로 작성된 코드에서 블록을 요구하지 않는 이유는 무엇입니까 ?

개인적으로 나는 그것을 많이 좋아하지 않으며 Qt로 작업하는지 여부에 관계없이 사용하지 않으며 예외 객체를 던지는 대신 항상 오류 코드와 반환 값을 사용합니다. 하지만 문서에 QException 클래스가 표시되지 않는 이유는 무엇입니까? 이것에 대한 Qt 개발자의 관점은 무엇입니까?


역사적 이유로 대부분. 컴파일러의 예외 지원은 성숙하는 데 상당한 시간이 걸렸습니다. Nokia의 Tobias Hunger 인용 :

"Qt가 시작되었을 때 Qt에서 지원해야하는 모든 컴파일러에 대해 예외를 사용할 수 없었습니다. 오늘날 우리는 API를 일관되게 유지하려고 노력하고 있습니다. 따라서 예외를 사용하지 않은 기록이있는 모듈은 일반적으로 추가 된 예외를 사용하여 새 코드를 얻지 못합니다. . Qt의 일부 새 모듈에서 예외가 사용되는 것을 알 수 있습니다. "

나는 그것이 그것을 거의 요약한다고 생각합니다.


"qt 예외"에 대해 Google을 검색하면이 주제에 대한 많은 토론을 얻을 수 있습니다. 다음 은 "공식적인"답변입니다.

Qt가 시작되었을 때 Qt에서 지원해야하는 모든 컴파일러에 대해 예외를 사용할 수 없었습니다. 오늘 우리는 API를 일관되게 유지하려고 노력하고 있으므로 예외를 사용하지 않은 기록이있는 모듈은 일반적으로 추가 된 예외를 사용하여 새 코드를 얻지 못합니다.

Qt의 일부 새 모듈에서 예외가 사용되는 것을 알 수 있습니다.

어시스턴트 색인 (즉, Qt 문서)에서 예외를 찾으면 일부 예외 클래스 (예 : QtConcurrent :: Exception)를 찾을 수 있습니다.


KDE devel 메일 링리스트에서 예외 대한 멋지고 대부분 문명화 된 토론을 읽을 수 있습니다 . KDE와 QT가 관련되어 있기 때문에 동일한 문제가 적용된다고 가정합니다. (스레드를 올바르게 읽으면) 다음과 같이 요약 할 수 있습니다.

  • 예외는 컴파일러에 따라 성능 문제가 있습니다.
  • 예외 사용 의무로부터 라이브러리 사용자 보호 (라이브러리에서 던지지 않음)
  • C ++의 예외 사양 관련 문제

참고 URL : https://stackoverflow.com/questions/5548951/why-doesnt-qt-use-exception-handling

반응형