예. STL 컨테이너의 값은 복사 의미 체계를 유지해야합니다. IOW, 그들은 기본 유형 (예 : int)처럼 행동해야합니다. 즉, 무엇보다도 기본 구성이 가능해야합니다.
이 (및 기타 요구 사항) 없이는 STL 컨테이너가 구현되는 데이터 구조에서 다양한 내부 복사 / 이동 / 스왑 / 비교 작업을 구현하는 것이 불필요하게 어려울 것입니다.
C ++ 표준을 참조하면 내 대답이 정확하지 않다는 것을 알 수 있습니다. 기본 구성은 실제로 요구 사항이 아닙니다 .
20.1.4.1부터 :
기본 생성자는 필요하지 않습니다. 특정 컨테이너 클래스 멤버 함수 서명은 기본 생성자를 기본 인수로 지정합니다. T ()는 잘 정의 된 표현식이어야합니다 ...
따라서 엄밀히 말해서 값 유형은 서명에서 기본 생성자를 사용하는 컨테이너의 함수를 사용하는 경우에만 기본 구성 가능해야합니다.
STL 컨테이너에 저장된 모든 값의 실제 요구 사항 (23.1.3)은 CopyConstructible
및 Assignable
.
특정 컨테이너에 대한 기타 특정 요구 사항도 있습니다 Comparable
(예 : 맵의 키).
덧붙여서, 다음은 comeau에서 오류없이 컴파일됩니다 .
#include <map>
class MyClass
{
public:
MyClass(int t);
};
int main()
{
std::map<int, MyClass> myMap;
}
따라서 이것은 g ++ 문제 일 수 있습니다.