いくつかの静的フリー関数を含むファイルがあります.cpp
。ヘッダー ファイルでそれがどのように役立つかはわかっていますが、cpp はどこにも含まれていないので、何の意味があるのでしょうか。それには何か利点がありますか。
ベストアンサー1
フリー関数を として宣言するとstatic
、内部リンクが付与され、TU の外部からは関数が見えなくなることが保証されるため、コンパイラーはより積極的な最適化が可能になります。たとえば、リンク可能なバージョンを提供する必要がないため、関数はアセンブリから完全に消えて、どこにでもインライン化される可能性があります。
もちろん、これによってセマンティクスも若干変更されることに注意してください。異なる TU で同じ名前の異なる静的関数を持つことは許可されますが、非静的関数の複数の定義を持つことはエラーになります。