Static exists to associate a method with a class, rather than either:
- Associating it with an instance of that class (like writing a normal, non-static member function).
- Keeping it in the global namespace or whatever namespace you would otherwise be in (like declaring a function just in the file, not in a class).
Static says that 'conceptually this is something tied to/associated with this class, but it does not depend on any instance of that class'.
In more formal terms: a static member function is the same as a function declared outside of a class in all ways other than that it is part of that class's namespace and in that it has access rights to that class's private/protected data members.
Going back to your question:
- There is no optimization gain here.
- Utility function has nothing to do with it. It's whether or not it makes sense to scope the function in the class itself (rather than an instance of it).
- It does not 'pass the this pointer' because there is no instance to speak of. You can call a static member function without ever invoking that class's constructor.