我在学习 C++ 时遇到的第一个问题是 itoa
函数在某些编译器上受支持,但实际上并没有在 ANSI-C 标准中定义(因此通常被认为是不好的做法使用)。
我见过很多解决方案,比如使用stringstream
或者snprintf
,总觉得很迂回,终于在C++11中有了 std::to_string
从语言的角度来看感觉更清晰。
但为什么要花这么长时间才能添加更直接的方法?除了一些关于效率的讨论和没有充分理由就不想改变标准之外,我很难找到任何东西。有没有正式说明为什么不包括它或者为什么他们最终决定将它添加到 C++11 中?是否讨论过将此添加到 C 的 future 修订版中?
事后看来,这是一个疏忽。然而,在不了解 C++ 发展历史的细节的情况下,我敢猜测这种疏忽有充分的理由, Root 于理论上。看,从数字到字符串的转换以及从数字到字符串的转换远非微不足道,而且它不太符合“强制转换”的正常定义(实际上,它需要解析器/格式化程序),即使大多数其他语言 < em>确实提供这样的类型转换。
除此之外,C++ 对字符串类型的支持相当……普通。 C 甚至没有真正的专用类型,它使用 char
数组代替。 C++ 略微更进一步,但由于缺乏适当的内置字符串支持而止步不前。这可以从很多方面看出,从字符串文字仍然是一个空终止的 char
数组这一事实,到人们普遍认为 std::string
有一个臃肿的,界面设计不佳。不要忘记 std::string
甚至不代表字符串!它代表一个字节数组!这是一个重要的区别,原因很简单,std::string
是完全不可知的编码。
啊,但是 C++ 实际上确实 支持正确的编码、正确的解析和格式化。它根本不为字符串提供它——它为流提供它。
我们已经有了。 C++ 没有合适的字符串类型。相反,它具有输入/输出流。