对于一个具体的例子,考虑atoi(const std::string &)
。这非常令人沮丧,因为我们作为程序员需要经常使用它。
更普遍的问题是,为什么 C++ 标准库不使用 C++ 字符串、C++ vector 或其他 C++ 标准元素重新实现标准 C 库,而不是保留旧的 C 标准库并强制我们使用旧的
char *
接口(interface)?它非常耗时,并且在这两个接口(interface)之间转换数据类型的代码不容易优雅。
是否出于兼容的原因,考虑到遗留的 C 代码比现在多得多,保留这些 C 标准接口(interface)会使从 C 代码到 C++ 的转换更容易?
另外,听说很多C++可用的库对STL做了很多增强和扩展,请问有库支持这些功能吗?
PS:考虑到第一个具体问题的更多答案,我进行了大量编辑以澄清问题以概述我更好奇要问的问题。
最佳答案
Another more general question is why do not STL reimplementate all the standard C libraries
因为旧的 C 库可以解决问题。 C++ 标准库只会重新实现现有功能,前提是它们可以比旧版本做得更好。对于 C 库的某些部分,编写新的 C++ 实现的好处还不足以证明额外的标准化工作是合理的。
至于 atoi
等,在 C++ 标准库中 有 这些的新版本,在 std::stringstream
类中.
从类型 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++ 不使用 C++ 元素/样式重新实现 C 标准函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1771117/