为什么到目前为止,C++中还没有明确包含整数到字符串的转换
Why was integer to string conversion not explicitly included in C++ until now?
我在学习C++时遇到的第一个问题是,itoa
函数在一些编译器上得到支持,但实际上并没有在ANSI-C标准中定义(因此通常被认为是不好使用的做法)。
我见过多种解决方案,比如使用stringstream
或snprintf
,这对我来说一直很迂回,最后在C++11中有了std::to_string
,从语言的角度来看,它感觉更干净。
但是,为什么花了这么长时间才添加一种更直接的方法呢?除了一些关于效率的讨论之外,我很难找到任何东西,也没有在没有充分理由的情况下改变标准的愿望。有没有正式说明过为什么不包括它,或者为什么他们最终决定在C++11中添加它?有没有讨论过将其添加到C的未来版本中?
事后看来,这是一个疏忽。然而,在不了解C++开发历史的细节的情况下,我大胆猜测这种疏忽有充分的理由,植根于理论。请看,从数字到字符串以及从字符串到数字的转换绝非易事,而且它不太符合"强制转换"的正常定义(实际上,它需要解析器/格式化程序),尽管大多数其他语言都提供了这样的强制转换。
除此之外,C++对字符串类型的支持相当……平淡无奇。C甚至没有一个真正的专用类型,而是使用char
数组。C++稍微了,但在没有适当的内置字符串支持的情况下停止了。这可以从许多方面看出,从字符串文字仍然是一个以null结尾的char
数组,到std::string
有一个臃肿、设计糟糕的接口的广泛共识。别忘了std::string
甚至不代表字符串!它代表一个字节数组!这是一个重要的区别,原因很简单,因为std::string
完全是编码不可知论者。
啊,但C++实际上确实支持正确的编码、正确的解析和格式化。它只是不为字符串提供它,而是为流提供它。
C++没有合适的字符串类型。相反,它有输入/输出流。
据我所知,这只是一个问题,你希望有多少种方法可以将整数转换为以10为基数的数字。C++从C(sprintf
)继承了一个,并添加了一个自己的operator<<(ostream &, int)
。这两个都比新的to_string
更可配置,所以我怀疑在C++98/03的时候并没有出现它们不足的情况。
2003年至2011年间,C++标准没有正式更改(一些公认的勘误表,仅此而已),所以它花了这么长时间的另一部分原因是C++0x花了这么久时间,这是因为与to_string
无关的原因。CCD_ 14在一定程度上填补了这一空白。
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 如何包含整数之间的空格作为输出
- int64_t 不包含 13 位整数
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 如何在 c++ 中解析包含整数的字符串并检查是否大于最大值
- 对包含整数的文本文件进行排序时,必须逐行进行排序
- 如何声明包含整数数组的对象
- 我需要声明一个包含整数向量的 4x4 矩阵
- C++ 如何格式化包含可变整数的文本行,使其在给定宽度内右对齐?
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 给定一个包含 n 个整数和一个整数 x 的未排序数组 A,重新排列 A 中的元素
- 如何在C 中正确定义包含科学符号的整数矢量
- 当我使用我的向量名称后跟包含整数变量的括号时,括号是什么意思
- 当我<int>推送包含整数的字符串时,如何修复被推回向量的垃圾值
- 不能在 c++ 中的字符串中包含整数
- 如何在 C++ 中包含整数输入的前面的 0
- 使用包含每个重复数量的列表生成重复,上升整数的顺序,并用推力
- 我正在尝试读取一个包含字符串和整数的二进制文件..并打印出与字符串对应的整数
- 如何打印包含整数和整数集的std::映射