gpt4 book ai didi

c++ - 为什么 std::ios_base::sync_with_stdio 没有在 libc++ (clang) 中实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:01 26 4
gpt4 key购买 nike

让我们看一下这个代码示例:

#include <iostream>

int main() {
std::ios_base::sync_with_stdio(false);

int n;
std::cin >> n;
for (int i = 0; i < n; ++i) {
int buf;
std::cin >> buf;
}
}

此代码示例对这样的输入的性能:

10000000
0
1
...
9999999

在我的机器上:

g++-5 -O2 -std=c++11:

./a.out < input.txt  0.86s user 0.07s system 98% cpu 0.942 total

clang-700.0.72 -O2 -std=c++11:

./a.out < input.txt  38.69s user 0.21s system 99% cpu 39.248 total

经过一些分析后,我发现 libc++ 根本没有禁用同步。

然后我查看了他们的代码,发现了这个: https://github.com/llvm-mirror/libcxx/blob/6a85e8a355be05b9efa8408f875014e6b47cef3b/src/ios.cpp#L458

所以我的问题是,这是设计使然还是错误?

最佳答案

sync_with_stdio 据我所知只是一个建议函数。

ios.members.static/2 说:

Effects: If any input or output operation has occurred using the standard streams prior to the call, the effect is implementation-defined. Otherwise, called with a false argument, it allows the standard streams to operate independently of the standard C streams.

恕我直言,“允许……独立运作”是关键。

没有对实现实际执行此操作的要求,而是禁止执行此操作,除非已进行此调用。

所以,是的,这是顺从行为。

关于c++ - 为什么 std::ios_base::sync_with_stdio 没有在 libc++ (clang) 中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com