为什么C不使用C元素/样式重新实现C标准函数?

前端之家收集整理的这篇文章主要介绍了为什么C不使用C元素/样式重新实现C标准函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于一个具体的例子,考虑atoi(con​​st std :: string&).这是非常令人沮丧的,因为我们作为程序员需要使用它太多.

更常见的问题是为什么C标准库不用C字符串,C矢量或其他C标准元素重新实现标准C库,而不是保留旧的C标准库,并强制我们使用旧的char *接口?
它的耗时和在这两个界面之间翻译数据类型的代码是不容易优雅的.
>为了兼容的原因,考虑到现在有比现在更多的遗留C代码,并且保留这​​些C标准接口将使C代码到C的转换变得更容易?
>此外,我听说过许多其他库可用于C进行大量的增强和扩展到STL.So有库支持这些功能

PS:考虑到第一个具体问题的更多答案,我编辑了很多,以澄清问题,以概述我更好奇的问题.

解决方法

Another more general question is why do not STL reimplementate all the standard C libraries

因为老C图书馆做的伎俩. C标准库只能重新实现现有功能,如果它们可以比旧版本好得多.而对于C图书馆的一些部分,编写新的C-implementation的好处并不足以证明额外的标准化工作.

对于atoi等,在std :: stringstream类中的C标准库中有新版本.

要将类型T转换为类型U:

T in;
U out;
std::stringstream sstr(in);
sstr >> out;

与IOStream库的其余部分一样,它并不完美,它是非常详细的,它是非常缓慢的等等,但它的工作,通常它是足够好的.它可以处理所有大小,浮点值,C和C字符串以及定义运算符“<”的任何其他对象的整数.

EDIT:In addition,I have heard many other libraries avaliable for C++ make a lot of enhancement and extensions to STL.So does there libraries support these functions?

Boost有一个boost :: lexical_cast,它包装std :: stringstream.使用该功能,您可以将以上内容写为:

U out = boost::lexical_cast<U>(in);

猜你在找的C&C++相关文章