cout/cin 是否在内部调用 printf() / scanf() 就像 `new` 调用 malloc?
Does cout/cin internally call printf() / scanf() like `new` calls malloc?
我在网上查过了。我找到了许多比较 cin
与 scanf()
和 cout
与 printf()
的答案,但从未发现 cin
是否像 [=] 在内部实际使用 scanf()
C++中的17=]运算符使用了C的malloc()
函数
C++ 标准并未指定 std::cin
和 std::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::cout
和 std::cin
必须做什么。它的实现方式取决于供应商。
确定的最佳方法是阅读给定实现的源代码。
您还需要知道,在后台 printf()
还使用了其他功能。用它们实现 cout
是优化明智的做法,因为这个对象并不完全像 printf()
函数那样工作。
std::cin
使用 scanf()
的可能性很小,甚至没有,因为它往往会出现问题(阅读 A beginners' guide away from scanf()
上的更多信息)。
我在网上查过了。我找到了许多比较 cin
与 scanf()
和 cout
与 printf()
的答案,但从未发现 cin
是否像 [=] 在内部实际使用 scanf()
C++中的17=]运算符使用了C的malloc()
函数
C++ 标准并未指定 std::cin
和 std::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::cout
和 std::cin
必须做什么。它的实现方式取决于供应商。
确定的最佳方法是阅读给定实现的源代码。
您还需要知道,在后台 printf()
还使用了其他功能。用它们实现 cout
是优化明智的做法,因为这个对象并不完全像 printf()
函数那样工作。
std::cin
使用 scanf()
的可能性很小,甚至没有,因为它往往会出现问题(阅读 A beginners' guide away from scanf()
上的更多信息)。