2つの呼び出しの意味は異なりますが、パフォーマンスとは関係ありません。実行時間を短縮するという事実は、副作用です(あるいはそうかもしれません)。それらは最適化のように見えるので、それぞれの機能を理解し、盲目的にそれらをすべてのプログラムに含める必要はありません。
ios_base::sync_with_stdio(false);
これにより、CおよびC ++標準ストリーム間の同期が無効になります。デフォルトでは、すべての標準ストリームが同期されます。これにより、実際には、CスタイルとC ++スタイルのI / Oを混在させ、適切で期待どおりの結果を得ることができます。同期を無効にすると、C ++ストリームは独自の独立したバッファーを持つことができるため、CとC ++スタイルのI / Oを混在させることができます。
また、同期されたC ++ストリームはスレッドセーフです(異なるスレッドからの出力はインターリーブされる可能性がありますが、データの競合は発生しません)。
cin.tie(NULL);
これcin
はcout
ます。タイドストリームは、1つのストリームが他のストリームの各I / O操作の前に自動的にフラッシュされることを保証します。
デフォルトでcin
はcout
、ユーザーが適切に操作できるように関連付けられています。例えば:
std::cout << "Enter name:";
std::cin >> name;
cin
とcout
が関連付けられている場合、プログラムがユーザーからの入力を要求する前に、出力がフラッシュされる(つまり、コンソールに表示される)ことが期待できます。ストリームの結合を解除すると、プログラムはユーザーが名前を入力するのを待つのをブロックする可能性がありますが、「名前を入力してください」というメッセージはまだ表示されていません(cout
されデフォルトでバッファされる、出力はオンデマンドでのみ、またはバッファがいっぱいです)。
したがって、cin
から解放する場合はcout
、でcout
入力を期待する前に、何かを表示するたびに手動でフラッシュする必要がありますcin
。
結論として、それらのそれぞれが何を知って、結果を理解し、次にあなたが本当にしたいか、必要かどうかを判断可能な速度向上の副作用を。