这两个调用具有不同的含义,与性能无关。它加快了执行时间的事实只是(或可能是)副作用。您应该了解它们各自的功能,不要盲目地将它们包含在每个程序中,因为它们看起来像是一种优化。
ios_base::sync_with_stdio(false);
这将禁用C和C ++标准流之间的同步。默认情况下,所有标准流都是同步的,实际上,这使您可以混合使用C和C ++风格的I / O并获得合理的预期结果。如果禁用同步,则允许C ++流具有其自己的独立缓冲区,这使C和C ++风格的I / O混合成为一种冒险。
还请记住,同步的C ++流是线程安全的(来自不同线程的输出可能会交织,但不会引起数据争用)。
cin.tie(NULL);
这是cin
来自的关系cout
。绑定的流确保在对另一流进行每个I / O操作之前自动刷新一个流。
默认情况下cin
,绑定可cout
确保合理的用户交互。例如:
std::cout << "Enter name:";
std::cin >> name;
如果cin
和cout
绑在一起,则可以期望在程序提示用户输入之前刷新输出(即,在控制台上可见)。如果您解开流,则该程序可能会阻止等待用户输入其名称,但“ Enter name”消息仍然不可见(由于cout
默认情况下已缓冲,因此仅在需要时或在控制台上刷新/显示输出)。缓冲区已满)。
因此,如果您cin
从中解开cout
,则必须确保cout
每次要显示内容时都要进行手动冲洗,然后再输入期望值cin
。
总之,了解它们各自的作用,了解其后果,然后确定您是否真的想要或需要提高速度的可能副作用。