std :: vector :: erase () 및 std :: deque :: erase ()의 할당 복사 / 이동
대답하는 과정에서 또 다른 질문 I가 약간 다른 원문 우연히 std::vector::erase()
및 std::deque::erase()
.
이것이 C ++ 14가 std::deque::erase
( [deque.modifiers]/4-6
, 강조 광산)에 대해 말한 것입니다.
효과 : ...
복잡성 : 소멸자에 대한 호출 수는 지워진 요소 수와 동일하지만 대입 연산자 에 대한 호출 수는 요소 수보다 작거나 같지 않습니다. 지워진 요소.
예외없는 : 아무것도 예외가의 복사 생성자, 이동 생성자, 대입 연산자, 또는 이동 할당 연산자에 의해 발생하지 않는 한
T
.
다음은 std::vector::erase
( [vector.modifiers]/3-5
) 에 대한 내용입니다 .
효과 : ...
복잡성 : 소멸자
T
횟수라고 소거 요소들의 수와 동일하지만, 이동 할당 연산자 의T
횟수라고는 소거 요소 후의 벡터의 요소들의 수와 동일.예외없는 : 아무것도 예외가의 복사 생성자, 이동 생성자, 대입 연산자, 또는 이동 할당 연산자에 의해 발생하지 않는 한
T
.
보시다시피, 둘 다에 대한 예외 사양은 동일하지만 std::vector
이동 할당 연산자가 호출되었다고 명시 적으로 언급되어 있습니다.
거기에 대한 요구 사항이기도 T
할 수 MoveAssignable
에 대해 erase()
모두 작업을 std::vector
하고 std::deque
(표 100)는, 그러나 이것은 이동 할당 연산자의 존재를 의미하지 않습니다 하나는 복사 할당 연산자를 정의하고, 이동 할당 연산자를 정의하지,이 클래스는 것입니다 수 있습니다 수 MoveAssignable
.
경우에 따라 GCC와 Clang을 확인하고 실제로 std::vector::erase()
이동 할당 연산자가 없으면 복사 할당 연산자를 호출 std::deque::erase()
하고 동일한 작업을 수행합니다 ( DEMO ).
그래서 질문은 : 내가 뭔가를 놓쳤습니까, 아니면 표준의 (편집) 문제입니까?
업데이트 : LWG 문제 # 2477을 제출했습니다 .
Lenexa 회의에서 문제 는 제안 된 해결 방법으로 즉시 상태 를 얻었습니다 .
이 표현은 N4296과 관련이 있습니다.
23.3.3.4 [deque.modifiers] / 5를 다음과 같이 변경하십시오.
-5 복잡성 : 소멸자 에
T
대한 호출 수는 지워진 요소 수와 동일하지만 할당 연산자 에T
대한 호출 수는 지워진 요소 이전의 요소 수보다 작거나 지워진 요소 다음의 요소 수23.3.6.5 [vector.modifiers] / 4를 다음과 같이 변경하십시오.
-4- 복잡성 : 소멸자는
T
소거 된 요소의 수와 같은 횟수라고하지만이동할당 연산자T
는 소거 된 요소 다음의 벡터에있는 요소의 수와 같은 횟수라고합니다.
즉, 해상도가 승인되면에 대한 이동 할당에 대한 특별한 언급이 없으며에 std::vector::erase
대한 문구 std::deque::erase
가 약간 명확해질 것입니다.
'development' 카테고리의 다른 글
UIButton에서 텍스트 밑줄 (0) | 2020.06.26 |
---|---|
Pandas의 DataFrame에서 행을 반복하는 방법은 무엇입니까? (0) | 2020.06.26 |
Java 클래스 파일 형식 주요 버전 번호 목록? (0) | 2020.06.26 |
Java 열거 리터럴이 일반 유형 매개 변수를 가질 수없는 이유는 무엇입니까? (0) | 2020.06.26 |
Javascript에서 예외를 다시 발생 시키지만 스택을 보존하려면 어떻게해야합니까? (0) | 2020.06.26 |