문제

그렇다,나는 보았 C++표준 내가 찾을 수 있(또는 임시 보관함),그러나 내가 찾지 못한 포괄적인 예외의 보증에 의해 주어진 STL 컨테이너입니다.내가 찾을 수있는 모든 가끔 섹션으로 불완전한 설명 의 기능에 대한 의 유형입니다.또는 아마도 그것은 있지만 나는 그냥 그것을 찾는 것,모르겠습니다.

참고: 에 대한 요구의 목록 보장하는 사람들의 생각할 수 있는 기본적으로 이 질문.
내가 찾는 것에 대해 신뢰할 수 있는 소스 이러한 정보의 자체--거나 바람직하게는 무료 버전의 소스(예:초안 표준의)내가 할 수 있습니다 더 많거나 적게 치료로 공식입니다.

도움이 되었습니까?

해결책

표준을 읽는 것은 무서운 일 수 있습니다 (표준으로 돌아가겠습니다). 그러나 Bjarne Stroustrup은 그의 책 'C ++ 프로그래밍 언어'에서이 주제에 정말 멋진 부록을 작성했습니다. 그는

에이 부록을 올렸습니다

http://www.stroustrup.com/3rd_safe0.html http://www.stroustrup.com/3rd_safe.pdf

그것은 꽤 오래 자세하게 (그리고 잘 쓰여졌습니다). 예를 들면 섹션을 찾을 수 있습니다. E.4 흥미로운, 인용구 :

E.4 표준 컨테이너 보증

라이브러리 작업 자체가 예외를 던 졌으면 할 수 있습니다. 작동하는 객체가 동작하는 객체가 잘 정의 된 상태. 예를 들어, a toring out_of_range를 던지십시오. 벡터 (§16.3.3)는 벡터에 대한 예외 안전에 문제가 없습니다. ...에 at ()의 작가는 벡터가 a에 있는지 확인하지 않습니다. 던지기 전에 잘 정의 된 상태.

섹션 E.4.1 상태

기본 보증 이외에 표준 라이브러리는 요소를 삽입하거나 제거하는 몇 가지 작업에 대한 강력한 보증

는 Page 956을 살펴 보았습니다.이를 위해 벡터, 복음, 목록 및지도에 대한 다양한 작업을위한 보증 테이블이 포함되어 있습니다. 요약에서 이러한 컨테이너의 모든 작업은 기본 보증을 제공하는

을 제외하고는 해당 컨테이너에 대한 모든 작업이 nothrow 또는 strong입니다.

참고 : 위의 텍스트는 이전이며 C ++ 11을 처리하지 않지만 대부분의 목표와 목적을 위해 충분히 정확해야합니다.

C ++ 11 ...

컨테이너에 대한 표준 첫 번째 상태 array, deque, forward_list, list, vector, map, set, unordered_map, unordered_set, queue,stack :

에서

23.2.1 / 10 :

별도로 명시하지 않는 한 (23.2.4.1, 23.2.5.1, 23.3.3.4 및 23.3.6.5)이 절에 정의 된 모든 컨테이너 유형은 다음과 같은 추가 요구 사항을 충족합니다.

- insert () 또는 emplace () 함수에 의해 예외가 발생하면 단일 요소를 삽입하는이 함수는 효과가 없습니다.
- PUSH_BACK () 또는 push_front () 함수에 의해 예외가 발생하면, 그 기능은 효과가 없습니다.


- 지우기 (), clear (), pop_back () 또는 pop_front () 함수가 예외.
- 반환 된 반복자의 복사 생성자 또는 할당 연산자 없음 예외를 던졌습니다.

- 스왑 () 함수는 예외를 던졌습니다.
- SWAP () 함수는 참조, 포인터 또는 반복자는 컨테이너의 요소를 교환합니다.

위에서 언급 한 각 섹션에서 지시 된 단점 (예외 안전 보증 각 호출)은 포함 된 유형의 해싱, 비교 작업뿐만 아니라 스왑을 던지는 것뿐만 아니라 예외를 다룰 때와 마찬가지로 벽에 대처합니다. 및 던지는 움직임 조작.

다른 팁

n3376

23.2.1 일반 컨테이너 요구사항[컨테이너입니다.요구 사항입니다.일반]

Paragraph10

달리 지정되지 않은 경우(보 23.2.4.1,23.2.5.1,23.3.3.4 및 23.3.6.5)모든 컨테이너 유형에 정의 이 절은 다음과 같은 추가적인 요구 사항:
—는 경우 예외가 발생하여 insert()거나 설치하다()함수에 삽입하는 동안 하나의 요소는 기능이 없 효과.
—는 경우 예외가 발생하여 push_back()또는 push_front()함수는 함수가 아무 효과.
—아 erase(),clear(),pop_back()또는 pop_front()함수에서 예외가 발생합니다.
—아니 복사본을 생성자 또는 할당을 운영자에게 반환되는 반복기 예외가 발생합니다.
—아 swap()함수에서 예외가 발생합니다.
—아 swap()함수는 무효화되어 어떤 참조,포인터 또는 반복기를 참조하는 요소의 용기되고 교환합니다.
[참고:End()반복기를 참조하지 않는 모든 요소,그래서 그는 무효화 될 수 있습니다.—미주]

23.2.4 연관 컨테이너[연관.reqmts]

23.2.4.1 예외 안전성을 보장[연관.reqmts.를 제외하고]

1 에 대한 연관 컨테이너,no clear()함수에서 예외가 발생합니다.삭제(k)는 예외가 발생하지 않습면 예외가 발생에 의해 컨테이너의 비교 개체(있을 경우).
2 에 대한 연관 컨테이너,예외가 발생하는 경우 모든 작업 내에서 삽입하거나 설치하다 함수에 삽입하는 하나의 요소의 삽입 효과가 없습니다.
3 에 대한 연관 컨테이너,아 스왑 함수에서 예외가 발생하면 예외가 발생하여 교환 컨테이너의 비교 개체(있을 경우).

23.2.5 순서가 지정되지 않은 연관 컨테이너[unord.req]

23.2.5.1 예외 안전성을 보장[unord.req.를 제외하고]

1 을 위한 순서가 지정되지 않은 연관 컨테이너,no clear()함수에서 예외가 발생합니다.삭제(k)는 예외가 발생하지 않습면 예외가 발생에 의해 컨테이너의 또는 해시 Pred 체(있을 경우).
2 을 위한 순서가 지정되지 않은 연관 컨테이너,예외가 발생하는 경우 모든 작업 이외의 다른 컨테이너의 해시에서 함수에 삽입하거나 설치하다 함수에 삽입하는 하나의 요소의 삽입 효과가 없습니다.
3 을 위한 순서가 지정되지 않은 연관 컨테이너,아 스왑 함수에서 예외가 발생하면 예외가 발생하여 교환 컨테이너의 또는 해시 Pred 체(있을 경우).
4 순서가 지정되지 않은 연관 컨테이너,예외가 발생하는 경우 내에서 재탕()함수에 의해 아닌 다른 컨테이너의 해시 기능 또는 비교 기능,개작()함수는 효과가 없습니다.

23.3.3.4 야 하는 수정[시스.수정자]

void push_back(T&&x)2

설명:예외가 발생하는 경우 이외에 복사본을 생성,이동 생성자,양자,또는 이동 할당의 운영자 T 없는 효과.는 경우 예외가 발생하여 이동 생성자의 비 CopyInsertable T 효과가 지정되지 않습니다.

반복을 삭제(const_iterator 임 첫째,const_iterator 임 마지막);단락 6

Throws:아무것도하지 않으면 예외가 발생에 의해 사본을 생성,이동 생성자,양자,또는 이동 할당 운영자의 T.

23.3.6.5 벡터 수정이[벡터입니다.수정자]

void push_back(T&&x)2

는 경우 예외가 발생하여 이동 생성자의 비 CopyInsertable T 효과가 지정되지 않습니다.

반복을 삭제(const_iterator 임 첫째,const_iterator 임 마지막);제 5

Throws:아무것도하지 않으면 예외가 발생에 의해 사본을 생성,이동 생성자,양자,또는 이동 할당 운영자의 T.

N3337 초안 표준, N3337 초안, 공식으로 치료할 수 있습니다. 그것은 C ++ 11 표준 플러스 사소한 사설 변경입니다.

쉽게 읽을 수 없기 때문에 이해할 수있는 표준을 읽는 법을 배워야합니다.

특정 라이브러리 작업에 대한 예외 보장을 찾으려면 해당 운영의 설명 및 예외의 주석에 대한 사양이 확인하십시오. 함수가 멤버 함수 인 경우 예외 안전 및 요구 사항을 충족시키는 것에 대한 의견의 사양을 확인하십시오. 그런 다음 해당 요구 사항을 충족시키기 위해 객체가 이루어져야하는 예외 보증에 대한 충족 된 요구 사항을 확인하십시오.

일반 유형 및 알고리즘은 유형 또는 알고리즘 또는 멤버 함수가 보류 할 모든 예외 보장을 위해 이러한 유형의 요구 사항을 확인하기 위해 템플릿 매개 변수에 배치 된 요구 사항을 확인합니다 (템플릿 매개 변수 지정된 요구 사항을 충족시키지 못하면 해당 매개 변수와 함께 템플릿을 사용하여 정의되지 않은 동작이 있고 템플릿의 사양이 적용되지 않습니다.).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top