迭代器是 basic_strings 之间的正确转换吗?这安全/合法吗?这会创建一个有效的字符串吗?
std::u16string str16;
//str16 is set here;
std::string cStr(str16.cbegin(), str16.cend());
在 VS 2013 中它似乎工作正常。
最佳答案
是的,这是合法的,因为char
可以从char16_t
初始化。但是,如果 char
已签名且值太大而不适合(C++11 §4.7/3),则转换的结果是实现定义的。 (char
是有符号还是无符号也是实现定义的,§3.9.1/1。)
正如评论中指出的那样,这不会将您的字符串转换为另一种编码。 (话虽如此,它可能会在字符串仅包含 ASCII 字符的情况下起作用。话虽如此,但请不要这样做。)
关于c++ - 通过迭代器进行 basic_string 转换是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849458/