包含有什么意义
ios_base::sync_with_stdio(false);
cin.tie(NULL);
在 C++ 程序中?
在我的测试中,它加快了执行时间,但是我应该担心包含这个的测试用例吗?
这两个语句是否总是必须在一起,还是第一个就足够了,即忽略 cin.tie(NULL)
?
此外,如果其值已设置为 false
是否允许同时使用 C 和 C++ 命令?
https://www.codechef.com/viewsolution/7316085
上面的代码运行良好,直到我在 C++ 程序中使用 scanf/printf
,其值为 true
。在这种情况下,它给出了分段错误。这可能是什么解释?
原文由 Kshitij Kohli 发布,翻译遵循 CC BY-SA 4.0 许可协议
这两个调用有不同的含义,与性能无关; 它加快执行时间 的事实是(或 _可能是_)只是一个副作用。您应该了解它们每个人的作用,而不是盲目地将它们包含在每个程序中,因为它们看起来像是一种优化。
这将禁用 C 和 C++ 标准流之间的同步。默认情况下,所有标准流都是同步的,这实际上允许您混合 C 和 C++ 样式的 I/O 并获得合理和预期的结果。如果禁用同步,则允许 C++ 流拥有自己的独立缓冲区,这使得混合 C 和 C++ 风格的 I/O 成为一种冒险。
还要记住,同步的 C++ 流是线程安全的(来自不同线程的输出可能会交错,但不会出现数据竞争)。
这将
cin
从cout
。绑定流确保在对另一个流执行每个 I/O 操作之前自动刷新一个流。默认情况下
cin
绑定到cout
以确保合理的用户交互。例如:如果
cin
和cout
并列,您可以预期在程序提示用户输入之前输出会被刷新(即,在控制台上可见)。如果您解开流,程序可能会阻止等待用户输入他们的姓名,但“输入姓名”消息尚不可见(因为cout
默认情况下被缓冲,输出被刷新/显示在仅在需要时或缓冲区已满时控制台)。So if you
cin
fromcout
, you must make sure to flushcout
every time you want to display something before expecting input oncin
.总之,知道他们每个人做了什么,了解后果,然后决定你是否真的想要或需要速度提高 可能 产生的副作用。