Private methods are implementation detail - if you can implement them as static non-members, you can insulate users of your class from changes in implementation. If this class had a declaration in a header, then every file that would include it would have to be recompiled every time this function changed. The header would also have to provide all types needed by the function declaration. Usually we can reduce physical coupling by having these methods outside the class.