nothrow (C++)nothrow (C++)

Microsoft 전용Microsoft Specific

__declspec 함수 선언에 사용할 수 있는 확장 특성입니다.A __declspec extended attribute which can be used in the declaration of functions.

SyntaxSyntax

반환 형식 __declspec (nothrow) [호출 규칙] 함수 이름 ([인수 목록])return-type __declspec(nothrow) [call-convention] function-name ([argument-list])

설명Remarks

모든 새 코드는 대신 noexcept 연산자를 사용 하는 것이 좋습니다 __declspec(nothrow) .We recommend that all new code use the noexcept operator rather than __declspec(nothrow).

이 특성은 컴파일러에게 선언한 함수와 이 함수가 요청한 함수들이 예외를 throw하지 않도록 명령합니다.This attribute tells the compiler that the declared function and the functions it calls never throw an exception. 그러나 지시문을 적용 하지는 않습니다.However, it does not enforce the directive. 즉, std: : terminatenoexcept 또는 std: c + + 17 모드 (Visual Studio 2017 버전 15.5 이상)에서 호출 되지 throw() 않습니다.In other words, it never causes std::terminate to be invoked, unlike noexcept, or in std:c++17 mode (Visual Studio 2017 version 15.5 and later), throw().

이제 기본값인, 동기 예외 처리 모델을 이용하여 컴파일러는 해제할 수 있는 특정 개체의 수명 추적 메커니즘을 제거할 수 있으며, 코드 크기를 크게 줄일 수 있습니다.With the synchronous exception handling model, now the default, the compiler can eliminate the mechanics of tracking the lifetime of certain unwindable objects in such a function, and significantly reduce the code size. 다음 전처리기 지시문이 지정 된 경우 아래의 세 함수 선언은 /std: c + + 14 모드에서 동일 합니다.Given the following preprocessor directive, the three function declarations below are equivalent in /std:c++14 mode:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

/Std: c + + 17 모드에서 throw()__declspec(nothrow) std::terminate 함수에서 예외가 throw 되는 경우가 호출 되기 때문에를 사용 하는 다른 다른와는 다릅니다.In /std:c++17 mode, throw() is not equivalent to the others that use __declspec(nothrow) because it causes std::terminate to be invoked if an exception is thrown from the function.

선언에는 void __stdcall f3() throw(); c + + 표준에 정의 된 구문이 사용 됩니다.The void __stdcall f3() throw(); declaration uses the syntax defined by the C++ standard. C + + 17에서 throw() 키워드는 사용 되지 않습니다.In C++17 the throw() keyword was deprecated.

Microsoft 전용 종료END Microsoft Specific

참조See also

__declspec__declspec
noexceptnoexcept
키워드Keywords