컨테이너 요구 사항이 C ++ 03에서 C ++ 11로 변경되었습니다. C ++ 03에는 포괄적 인 요구 사항 (예 : 벡터에 대한 복사 구성 및 할당 가능성)이 있었지만 C ++ 11은 각 컨테이너 작업에 대한 세부적인 요구 사항을 정의합니다 (섹션 23.2).
따라서 할당이 필요하지 않은 특정 작업 만 수행하는 한 (construction 및 push_back이러한 작업) 벡터에 복사 생성 가능하지만 할당 할 수없는 유형 (예 : const 멤버가있는 구조)을 저장할 수 있습니다. ; insert아닙니다).
내가 궁금한 것은 : 이것이 표준이 이제 허용한다는 의미 vector<const T>입니까? 나는 그것이 안되는 이유를 보지 못했다- const T, const 멤버가있는 구조처럼, 복사는 구성 할 수 있지만 할당 할 수없는 유형이다-그러나 나는 무언가를 놓쳤을 수있다.
(내가 뭔가를 놓쳤다 고 생각하게 만드는 부분 중 하나는 인스턴스화하려고하면 gcc 트렁크가 충돌하고 화상을 입지 vector<const T>만 vector<T>T에 const 멤버가있는 곳에서는 괜찮습니다 ).
address기본 할당 자에있는 오버로드 된 멤버 함수 쌍입니다 . T가 const이면이 두 오버로드는 동일한 서명을 갖습니다. 이를 수정하는 쉬운 방법std::allocator<const T>은 오버로드 중 하나 를 전문화 하고 제거하는 것입니다.