为什么直到现在才在C++中明确包含整数到字符串转换?

the*_*oot 5 c c++ string string-conversion c++11

我在学习C++时遇到的第一个问题是,itoa某些编译器支持该函数,但实际上并未在ANSI-C标准中定义(因此通常被认为是不好的实践).

我已经看到了多种解决方案,比如使用stringstream或者snprintf,对我来说总是感觉非常迂回,最后在C++ 11中std::to_string,从语言的角度来看感觉更清晰.

但为什么要添加更直接的方法需要这么长时间?除了一些关于效率的讨论以及没有充分理由改变标准的渴望之外,我一直难以找到任何东西.有没有正式说明为什么不包含这个或为什么他们最终决定在C++ 11中添加它?是否有任何讨论将此添加到C的未来版本中?

Kon*_*lph 5

事后看来,这是一种疏忽.然而,在不了解C++发展历史的细节的情况下,我冒昧地猜测这种疏忽有充分的理由,植根于理论.请参阅,从数字到字符串的转换,反之亦然,这非常简单,并且它不能很好地符合"强制转换"的正常定义(实际上,它需要解析器/格式化程序),即使大多数其他语言也是如此提供这样的演员.

除此之外,C++对字符串类型的支持相当......行人.C甚至没有真正的专用类型,它使用char数组代替.C++ 略微进一步,但远远没有适当的内置字符串支持.这可以在很多方面看出,从字符串文字仍然是一个以空终止的char数组的事实,到std::string具有膨胀,设计不良的界面的广泛共识.不要忘记,std::string甚至不代表一个字符串!它代表一个字节数组!这是一个重要的区别,其原因很简单std::string就是完全编码不可知.

啊,但C++实际上不支持正确的编码,和适当的解析和格式化.它根本不提供字符串 - 它为流提供它.

我们终于得到它了.C++没有正确的字符串类型.相反,它有输入/输出流.