cout/cin 是否在内部调用 printf() / scanf() 就像 `new` 调用 malloc?

Does cout/cin internally call printf() / scanf() like `new` calls malloc?

我在网上查过了。我找到了许多比较 cinscanf()coutprintf() 的答案,但从未发现 cin 是否像 [=] 在内部实际使用 scanf() C++中的17=]运算符使用了C的malloc()函数

C++ 标准并未指定 std::cinstd::cout 等标准库设施的实现方式,仅指定了它们的行为方式。 C++ I/O 函数是否调用它们的 C 对应函数取决于实现。

作为如何实现 C++ I/O 流的示例,我们可以查看 libstdc++ 的源代码,它是 GCC 的标准库实现。当您使用 std::cin >> x 读取 int 时调用的 std::basic_istream& operator>>(int&) 函数会调用一些调用其他函数的函数,并最终到达实际解析整数的 _M_extract_int 函数。因此,libstdc++ 没有使用 C I/O 函数为 int 实现流提取运算符。不过请记住,这只是一个示例,其他标准库的实现可能有所不同。

C++ 标准规定了对象 std::coutstd::cin 必须做什么。它的实现方式取决于供应商。

确定的最佳方法是阅读给定实现的源代码。

您还需要知道,在后台 printf() 还使用了其他功能。用它们实现 cout 是优化明智的做法,因为这个对象并不完全像 printf() 函数那样工作。

std::cin 使用 scanf() 的可能性很小,甚至没有,因为它往往会出现问题(阅读 A beginners' guide away from scanf() 上的更多信息)。