Yes, the variables declared inside will have their own scope. It is absolutely safe. I highly recommend using it. The reason is because under the C/C++ parsing rules a statement and a block are interchangeable.
You can, but be sure to get mixed up with which variables you want to keep and which you don't, only create a scope when you know you won't use a variable anymore afterwards (or if it can be set to a variable with a larger scope).
A so far unmentioned benefit is that C++ destructors are called at the end of a block, so you can use these to manage the lifetime of objects you create within a function.