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

标签 c++ c stl

对于一个具体的例子,考虑atoi(const std::string &)。这非常令人沮丧,因为我们作为程序员需要经常使用它。

  1. 更普遍的问题是,为什么 C++ 标准库不使用 C++ 字符串、C++ vector 或其他 C++ 标准元素重新实现标准 C 库,而不是保留旧的 C 标准库并强制我们使用旧的 char * 接口(interface)?

    它非常耗时,并且在这两个接口(interface)之间转换数据类型的代码不容易优雅。

  2. 是否出于兼容的原因,考虑到遗留的 C 代码比现在多得多,保留这些 C 标准接口(interface)会使从 C 代码到 C++ 的转换更容易?

  3. 另外,听说很多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/

相关文章:

c++ - 在 C++ 中获取用户的登录 session

c - 如何用另一个函数覆盖一个函数?

c++ - 找到可能不返回的最佳匹配的算法

创建具有不同结构类型的链表

c++ - 为什么我不能将 unique_ptr 推回 vector 中?

c++ - STL列表题C

C++ OOP 基础知识(将对象分配为成员)

C++ 模板函数实现不正确

c++ - 像 std::vector 中的元素一样就地合并

c - execl 没有捕获所有参数