c++ - 通过迭代器进行 basic_string 转换是否合法?

标签 c++ string c++11 string-conversion

迭代器是 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/

相关文章:

c++ - 将值保存到数组中

c++ - 高效地使用函数输出

c++ - 为什么 StereoSGBM 给出负数和上面的 numberOfDisparities 数

c++ - 有没有办法分解指向函数的模板化指针?

c++ - 我如何计算包含数字和字母的字符串的平均值?

java - 如何从字符串中提取单词?

Python 在使用 __repr__ __str__ 时打印内存地址而不是列表?

c++ - 将类成员函数作为同一类的另一个成员函数的参数传递

c++ - 从 STL 迭代器非公开派生的自定义迭代器的最小功能?

c++ - 未初始化的值由堆分配 : Unordered_map 创建