For a while I have, in C++ I have used 3 spaces as my coding style.
2 spaces doesn't seem obvious enough to me when looking at large screens of code.
On the other hand I find 4 spaces to be too much indentation, you are wasting horizontal space which is already fairly limited due to 80 column limits most coding styles also use.
Then again you shouldn't be using too many levels of indentation and if you are things like loops and if-blocks should be extracted out into smaller functions. Having 4 spaces might make it more obvious which code should get the snip.
Some of it will depend on other factors such as how horizontally noisy your language is and if it uses a lot of indentation. C++ can use a lot with namespaces, classes, functions, if/while blocks and so on. C not having much scoping would use less.
For example your brace style. If you put braces on the same line or you give braces their own line:
With same-line braces and 3 spaces the extra indentation helps show the nesting.
With braces and 2 spaces, the braces already make the nesting obvious:
I really don't like braces-with-their-own-lines. It seems like a massive waste and is ugly. I actually use a more complex rule. It's "Braces should be on the same line UNLESS the line was split due to column width.". This is because it helps with indentation soup but it might be to complex a rule to enforce and could be non-obvious to people jumping on a project:
inline std::vector<std::string> getTheVectorOfStrings(const std::string& query,
const std::string& identifier,
const int max) const
Having said that, personally I'm thinking about switching to 2 spaces as this seems to be the norm for C++. Google, Chromium, Mozilla, all use it, LLVM standards just says be consistent but seem to be defaulting to 2 spaces, Webkit does prefer 4 though.
2 isn't too bad visually compared to 3 spaces and saves more on horizontal indenting. I haven't seen 3 space indents used in the real world.