2013-01-08 2 views
2

vector <fstream>을 사용하려고하면 컴파일 오류가 출력됩니다. 왜 C++은 fstream의 벡터를 금지합니까?왜 fstream 벡터를 사용할 수 없습니까?

+0

비 C++ 컴파일러 (11)에 수 (반드시 분별되지 않은) 대안이 '표준 : 벡터를 사용하는 것이 아니기 때문에 복사 가능한 <표준 : fstream *>'... – us2012

답변

10

fstream가

+1

기술적으로'fstream'은 개념이 C++ 03에는 존재하지 않았기 때문에 C++ 11에서만 "움직일 수있는"것입니다. 그리고 C++ 11에서는 C++ 11의'std :: vector'에 움직이기 전용 타입을 넣을 수 있습니다. 따라서 그의 코드는 C++ 11 컴파일러에서 컴파일됩니다. –

+0

@NicolBolas, 솔직히 말해서 [이 기사] (http://liveworkspace.org/code/3Ftdq5%246)는 내가 지금까지 본 코드 비율 중 가장 큰 오류입니다. 이 작업을 수행해서는 안되며, 일부 의미 이동 작업에 대해서는 어리석은 행동을해야합니까? – chris

+1

@chris : 오류는 GCC가 emplace_back을 구현할 때 move_if_noexcept (또는 그것에 기반한 무언가)를 사용하려고하기 때문에 발생합니다 (벡터가 커지는 경우에는 사용하지 않는 경우에도 컴파일해야 함). 실행 시간). 그러나 fstream의 이동 생성자는 'noexcept'로 표시되지 않으므로 복사 버전으로 폴백해야합니다. –