I've been using this operator for a while, but I always thought it was syntactic sugar. Yesterday, I decided run some code through the debugger, and I was surprised to find the difference between them.
This will invoke SomeMethod() twice:
var someval = (SomeMethod() == null) ? String.Empty : SomeMethod();
This will not:
var someval = SomeMethod() ?? String.Empty;