자체 반복자를 사용하여 컨테이너를 할당하는 것이 안전합니까?


10

예로서:

string s = "123";
s.assign(find(s.begin(),s.end(),'2'), s.end());

위 코드의 동작이 정의되어 있습니까? 아니면 정의되지 않은 동작으로 이어질까요?

답변:


5

예. 이 버전의 assign은 다음 과 같이 정의 됩니다.

template<class InputIterator>
  constexpr basic_string& assign(InputIterator first, InputIterator last);

제약 조건 : InputIterator는 입력 반복자 자격을 갖춘 유형입니다.

영향 : 다음과 같습니다. return assign (basic_string (first, last, get_allocator ()));

변경 사항이 발생하기 전에 계산 된 임시 값을 보여줍니다.


"와 동등한"은 실제 임시가 작성되어야 함을 의미하지 않습니다. 그러나 의미는 동일해야합니다. 그리고 표시된 버전은 자체 할당에 대해 안전하므로 실제 구현도 마찬가지입니다.
MSalters

@MSalters. 동의했다. 할당 자 사용량을 얼마나 많이 제거 할 수 있는지를 결정하는 데 실패했습니다.
AProgrammer

이것은 문자열에만 해당됩니다. 예를 들어 벡터의 경우 UB가됩니다.
TC

@ TC 표준을 인용 할 수 있습니까?
Adler

1
@Adler, 벡터 설명 참조하는 이 표 를 참조하십시오 .
AProgrammer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.