2011-04-22 5 views
14

C++ 0X 작업 초안의 마지막 편집을 통해가는 동안 나는 키워드 텍스트의 noexcept "noexcept"는 "예외 없다 : 아무것도"

  • 추가의

    • 제거를 많이 발견 오류 : 아무것도 아니요 같은 장소에

    그 반대의 경우도 마찬가지입니다. 그냥 몇 가지 예 : 에 대한 noexcept 예외의

    • 교체 : 아무것도 : noexcept20.6.4 포인터 안전 [util.dynamic.safety]template<class T> T*undeclare_reachable(T*p);
    • 또한 : 20.6.3.2. 우리는 대 예외 noexcept 찾을 일반적인 규칙/패턴이 없다

      • : 아무것도 여기 static pointer pointer_trait<T*>::pointer_to(...) noexcept;

      질문 : 포인터 멤버 함수 [pointer.traits.functions]를 할 특성 Std-Lib?

    • 사용자가 주어진 규칙에 따라 특정 동작을 유도해야합니까? 나는. 은 자신의 기능에 noexcept을 추가해야합니까, 그렇지 않아야합니까?
  • 답변

    16

    마드리드에서 우리는 강력하게 다음과 같은 지침을 포함하는 N3279에 의해 영향을받은 :

    채택 지침

    • 없음 라이브러리 소멸자 넣지해야합니다. 그들은 암시 적으로 제공된 (throw되지 않는) 예외 명세를 사용해야한다.

    • LWG가 동의 할 수없는 넓은 계약을 갖는 각 라이브러리 함수는 무조건 noexcept로 표시되어야합니다.

    • 라이브러리 스왑 함수, 이동 생성자 또는 이동 할당 연산자가 조건부 (즉, noexcept 연산자를 적용하여 throw하지 않는 것으로 입증 된 경우) 조건부로 noexcept로 표시되어야합니다. 다른 함수는 조건부 noexcept 스펙을 사용해야합니다.

    • "C"코드 (예 : 원자 공학 설비)와의 호환성을 위해 설계된 라이브러리 기능은 무조건 noexcept로 표시 될 수 있습니다.

    필자는 반드시이 가이드 라인을 광범위한 잠재 고객을 대상으로합니다. 이것은 noexcept를 추가 할 때 이전 버전과의 호환성 문제가 있다는 것을 인정하는 것입니다. 잘못하면 noexcept를 추가하는 것이 다음 표준에서 제거하는 것보다 쉽습니다. 그래서 우리는 보수적이고 체계적인 noexcept의 적용을 시도했습니다.

    +0

    알 수 있습니다. 어려운 상황.필자는 WG21 문서에서 * "noexcept"를 언제 내 자신의 기능에 추가해야합니까? * N3279는 좋은 시작점입니다. 더 이상 가지고 있니? 예를 들어, 나는'swap'이 사용자 코드에서'noexcept'이어야한다고 제안했고, * move-assign *에 관한 문헌을 따라갈 계획이었습니다. 사용자가'noexcept'를 표시하거나 암묵적인 가정입니까? 우리는 컴파일러가 (언젠가) 그것으로부터 사용자의 어떤 것을 얻을 것으로 기대할 수 있습니까? – towi

    +0

    현재 noexcept를 구현하는 컴파일러에 액세스 할 수 없습니다. 그러므로 나는이 문제에 대해 개인적인 조언을하지 않는다. (실험은 나와 함께 큰 일이다.) 모든 WG21 문서는 다음에서 찾을 수 있습니다. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ –

    +0

    감사합니다. 나는 컴파일러 노트를 자세히 읽습니다. 예, 저는 이미 그 논문에 깊이 관여되어 있습니다 :-) – towi