在C++中,ios_base::sync_with_stdio(0);和ios::sync_with_stdio(0);有什么区别?

3

我的CP导师建议我使用ios_base :: sync_with_stdio(0);,因为它可以提高程序执行速度。在观看YouTube上的一些视频时,我也看到了ios :: sync_with_stdio(0);。

那么,添加或删除 _base 会有什么区别?

哪个更好,ios_base :: sync_with_stdio(0);还是ios :: sync_with_stdio(0);?

请解释一下。提前感谢您。


通过调试器逐步查找它们的差异。 - Ulrich Eckhardt
1
除非你有充分的理由,否则不要使用它们。你明白这种速度提升是从哪里来的吗?你真的需要它吗?同样的问题问问你的导师。 - Evg
1
没有比这更好的了。ios::sync_with_stdio是从ios_base继承的静态方法,它实际上是同样的东西。 - freakish
1
@Evg 谢谢您的回复,先生。我对此有一些了解。使用这个 ios_base::sync_with_stdio(0); 禁用了 C 和 C++ 标准流之间的同步。因此,C++ 有自己独立于 C 的缓冲区,使得程序运行更快。我的导师们推荐我这样做,因为我在参加 Codechef 的长期挑战时反复遇到超时问题。 - Bhavya Malhotra
坦白说,我不明白为什么人们在学习一门语言之前要先参加一些无聊的比赛。大多数所谓的竞技编程网站上都有一些糟糕且难以维护的代码示例。利用这些网站来学习语言只是浪费时间。从实际角度来看,代码的清晰度比起可能通过类似sync_with_stdio的技巧带来的速度更重要。 - Evg
显示剩余2条评论
1个回答

5
在C++中,ios_base::sync_with_stdio(0);和ios::sync_with_stdio(0);有什么区别?
一个需要多输入5个字符的"_base"。除此之外没有其他区别。
该函数被定义为ios_base类中的静态公共成员函数。ios实际上是typedef basic_ios ios;,而basic_ios继承自ios_base。因此,ios_base::sync_with_stdio从ios_base继承到basic_ios,再继承到ios。这是同一个函数。同样的方法,您可以使用std::wios::sync_with_stdio或std::basic_ios::sync_with_stdio等。

了解更多信息,请参见 cppreference io, cppreference static members, cppreference sync_with_stdio, cppreference derived classes ,我始终建议阅读一本好的 C++ 入门书。

ios_base::sync_with_stdio(0); 和 ios::sync_with_stdio(0); 哪个更好?

它们是相等的。


1
谢谢!我对你提到的这些类和函数还不太熟悉,但我理解了你回答的要点。可能在进一步的学习中,这个详细的回答会帮助我更好地理解编程的内部机制。再次感谢! - Bhavya Malhotra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接