【问题标题】:Is basic_string conversion via iterators legal?通过迭代器进行 basic_string 转换是否合法?
【发布时间】:2014-05-24 20:42:40
【问题描述】:

迭代器是基本字符串之间的适当转换吗?这是安全/合法的吗?这会创建一个有效的字符串吗?

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

在 VS 2013 中它似乎工作正常。

【问题讨论】:

  • 这不会将您的字符串转换为另一种编码,只需逐个元素地复制它。如果您的 str16 包含不适合 char 的代码单元,它们将被截断。

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


【解决方案1】:

是的,这是合法的,因为 char 可以从 char16_t 初始化。但是,如果 char 已签名并且值太大而无法容纳(C++11 §4.7/3),则转换的结果是实现定义的。 (char 是有符号还是无符号也是实现定义的,§3.9.1/1。)

正如 cmets 中所指出的,这不会将您的字符串转换为另一种编码。 (话虽这么说,它可能会在字符串仅包含 ASCII 字符的情况下工作。说,不要这样做。)

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 2012-02-08
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2018-05-12
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多