2014-05-24 6 views
3

iterator는 basic_strings 사이의 프로퍼티 변환입니까? 안전인가요? 합법입니까? 이것은 유효한 문자열을 생성합니까?iterator를 통한 basic_string 변환은 합법적입니까?

std::u16string str16; 
//str16 is set here; 
std::string cStr(str16.cbegin(), str16.cend()); 

VS 2013에서는 제대로 작동하는 것 같습니다.

+6

문자열을 다른 인코딩으로 변환하지 않고 요소 만 복사합니다 요소별로. str16에'char'에 맞지 않는 코드 단위가 있다면, 그것들은 잘립니다. –

+0

관련, 정확한 복제 : [string between string, u16string, u32string] (http://stackoverflow.com/questions/7232710/) – quetzalcoatl

답변

7

charchar16_t에서 초기화 할 수 있기 때문에 가능합니다. 그러나 char이 서명되어 있고 값이 너무 커서 (C++ 11 §4.7/3) 변환의 결과는 구현에 따라 정의됩니다. (char이 서명되었거나 서명되지 않았는지 여부는 구현 정의, §3.9.1/1입니다.)

주석에서 지적했듯이, 이것은 문자열을 다른 인코딩으로 변환하지 않습니다. (즉, 문자열이 ASCII 문자 만 포함하는 경우에도 작동 할 것입니다. 은 말합니다.