다음을 통해 공유


경고 C26447

함수가 선언되었지만 noexcept 예외를 throw할 수 있는 함수 function_name 호출합니다(f.6).

C++ 핵심 지침:
F.6: 함수가 throw되지 않을 수 있는 경우 noexcept를 선언합니다.

설명

이 규칙은 다른 규칙인 C26440 DECLARE_NOEXCEPT 수정합니다. 이 규칙은 표시 noexcept할 좋은 후보 함수를 찾으려고 시도합니다. 이 경우 일부 함수를 표시 noexcept한 후에는 예외를 throw할 수 있는 다른 코드를 호출하지 않음으로써 계약을 유지해야 합니다.

  • Microsoft C++ 컴파일러는 이미 함수 본문의 문과 같은 throw 간단한 위반을 처리합니다(C4297 참조).
  • 규칙은 함수 호출에만 중점을 둡니다. 그렇지 않고 constexpr 잠재적으로 예외를 throw할 수 있는 대상에 플래그를 지정합니다. 즉, throw 또는 throw()를 사용하여 noexcept__declspec(nothrow)명시적으로 비던지기로 표시되지 않습니다.
  • 컴파일러에서 생성된 대상 함수는 예외 사양이 항상 컴파일러에서 제공되지 않으므로 노이즈를 줄이기 위해 건너뜁니다.
  • 또한 검사er는 사용자가 구현noexcept할 것으로 예상되는 특수한 종류의 대상 함수를 건너뜁니다. 이 규칙은 C26439 SPECIAL_NOEXCEPT 의해 적용됩니다.

예시

#include <vector>
#include <string>
#include <istream>

std::vector<std::string> collect(std::istream& is) noexcept
{
    std::vector<std::string> res;
    for (std::string s; is >> s;) // C26447, `operator bool()` can  throw, std::string's allocator can throw
        res.push_back(s);         // C26447, `push_back` can throw
    return res;
}

함수 서명에서 제거하여 noexcept 이러한 경고를 해결할 수 있습니다.

참고 항목

C26440 DECLARE_NOEXCEPT