inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C++

14.4 exception 소개

noexcept과 throw()

78

넘블

작성한 질문수 19

1

noexcept 키워드와 함수구문 뒤에 예외를 던지지 않을것이라고 명시해주는 throw()키워드는 동일한 것인가요?

c++

답변 2

0

durams

안녕하세요? 질문&답변 도우미 durams입니다.

throw()는 함수 선언 뒤에 따라붙는 걸 말씀하시는거죠? noexceptthrow()를 동일하다고 볼 수도 있습니다만, 확실한 차이가 있습니다.

먼저 throw()를 하는 문법인 Dynamic exception specification 문법은 C++11에서 deprecated되었고, c++17부터는 표준에서 제거되었습니다. 그 이유는 throw()의 괄호에 특정 타입들을 명시하여 발생 가능한 예외를 명시하는 경우 발생 가능한 문제들이 있었기 때문이라고 합니다.

간단히 말씀드리자면 기본적으로 throw()는 타입이 주어진 경우, 명시되지 않은 타입의 예외가 발생한다면 프로그램이 종료됩니다. 그런데 만약 예를 들어 throw(int)와 같이 타입을 명시한 함수에서 어떠한 외부 라이브러리 함수를 사용하는데, 라이브러리 함수가 업데이트되어 다른 타입의 예외를 발생시킨다면 어떻게 될까요? 프로그래머는 해당 예외에 대응하기 위해 가장 낮은 레벨에서부터 최상위 레벨까지 모든 코드를 수정해야합니다. 라이브러리의 업데이트를 저해하는 부수적인 효과는 덤이구요.

C++17부터는 타입을 명시하지 않은 throw()만 사용할 수 있으며, 컴파일러에게는 noexcept(true)로 인식됩니다. 그리고 그 마저도 C++20부터는 표준에서 제거되었다고 합니다. (레거시 코드와의 호환성 지원을 위해서인지 컴파일러에 따라 사용이 가능한 경우는 있습니다)

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

장준혁님, noexcept 키워드와 함수 구문 뒤에 붙는 throw()는 C++에서 함수가 예외를 던지지 않을 것을 보장하기 위해 사용됩니다. 둘은 비슷한 목적으로 사용되지만, 몇 가지 차이점이 있습니다.

  1. noexcept: C++11부터 도입된 키워드로, 함수가 예외를 던지지 않겠다고 명시합니다. 컴파일러 최적화와 관련된 유리한 점이 있습니다. noexcept는 제외 조건도 제공할 수 있으며, 불리언 표현식을 통해 동적으로 except 여부를 결정할 수 있습니다.
   void func() noexcept; // 예외를 던지지 않음
  1. throw(): 이전 C++ 표준에서 사용되던 방식으로, 함수가 예외를 던지지 않을 것임을 표시합니다. 그러나 noexcept가 도입된 이후로는 사용이 줄어들고, throw()를 deprecated로 간주하기도 합니다.
   void func() throw(); // 예외를 던지지 않음 (구식)

따라서 C++11 이후부터는 noexcept를 사용하는 것이 권장됩니다. 둘의 주된 차이는 noexcept가 더 유연하고 최적화에 도움을 줄 수 있다는 점입니다.

관련 질문을 확인해 보시려면 아래 링크를 참고하세요:
- [throw; vs throw e;의 차이가 궁금합니다.]

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

교재 있나요?

1

127

2

11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)

1

85

3

using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다

1

98

2

cstr직접구현

0

111

3

BubbleSort

1

75

2

숙제 마지막 부분

1

76

2

강의와 똑같이 진행했는데 링킹 에러가 발생합니다.

1

90

2

수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??

1

158

2

공변반환형 관련 문의 드립니다.

1

88

2

170강 유니크 포인터에대해 질문있습니다

1

78

1

섹션 5 퀴즈의 답이 이상합니다

1

82

2

이중포인터와 배열이 이해가 안됩니다.

1

151

2

5분 17~5분 34초 객체 잘림 질문

1

74

1

Resource.h 코드 알려주세요

1

70

1

char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다

1

93

2

화면좌측 숫자 보이기

1

111

1

화면 좌측 숫자 보이기

0

65

1

처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??

1

134

3

46강 string 버퍼 질문입니다

1

79

2

프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.

1

122

2

[] 범위 검사시 assert 사용 관련 질문

1

84

2

Lecture 클래스 멤버변수 명명 관련

0

85

2

프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요

0

67

1

explicit instantiation에 대해

1

60

2