C++ 環境で stringstream よりも sprintf を好む理由について、本当の理由のある具体的な例はありますか? さらに、Microsoft の世界で働いている場合、_snprintf よりも sprintf を好む理由はありますか?
2 に答える
I use sprintf
all the time in C++. I find it easier to work with, particularly when I am writing timestamps and other specially-formatted strings. Sure, you can do this with stream modifiers, but it's so long-winded, you can't see what the code is achieving at a glance.
It is preferable over _snprintf
if you absolutely know that you won't be overflowing a buffer, and you require the fastest possible write or just don't want the extra parameter clutter.
Speaking of buffers, that's the other thing... Usually I would use sprintf
or its variants when I have a buffer on the stack or I am writing into an existing buffer in memory. I wouldn't necessarily want the overhead of allocating and copying string
objects about.
Not saying that I don't use ostringstream
-- I certainly do (although more often I use istringstream
, going the other way)... But I prefer to have two tools at my disposal instead of one.
sprintf
ストリームよりも優先することはありませんが、状況によってはsnprintf
(または_snprintf
MS コンパイラの場合) 検討することもできます。
パフォーマンスが測定された適切なパフォーマンス集約型のコードの場合snprintf
、ストリームを使用するよりもパフォーマンスが向上する可能性があります。
さらに、C API に渡すバッファーをsnprintf
既に維持している場合は、使用を検討することもできます。char[]
繰り返しになりますが、さまざまなセキュリティの問題や見つけにくいバグを防ぐのに役立つため、常に優先_snprintf
または優先snprintf
する必要があります。sprintf