ファイルに静的関数を含めることの有用性は何ですか?
ファイル内にグローバル関数を持つこととどう違うのですか?
static int Square(int i)
{
return i * i;
}
対
int Square(int i)
{
return i * i;
}
ファイルに静的関数を含めることの有用性は何ですか?
これらの関数を使用して、同じファイル内の他の関数に共有実装ロジックを提供できます。ファイルに固有のさまざまなヘルパー関数は、file-static と宣言するのに適した候補です。
ファイル内にグローバル関数を持つこととどう違うのですか?
これらはリンカからは見えないため、他のコンパイル ユニットが同じシグネチャを持つ関数を定義できます。名前空間を使用すると、この問題は大幅に軽減されますが、ファイルstatic
関数は C プログラミング言語から継承された機能であるため、名前空間よりも前から存在します。
static
関数は、リンカが関数をエクスポートできないことを意味します (つまり、関数を他の翻訳単位から見えるようにします)。関数を現在の翻訳単位に対して「プライベート」にします。これは、匿名の名前空間で関数をラップするのと同じです。
namespace {
int Square(int i)
{
return i * i;
}
}
一般に、匿名名前空間を使用することは、static
キーワードを使用する代わりに、これを達成するための推奨される C++ の方法です。
静的関数は、それらが定義されたファイルでのみ表示されます。その特定のファイルの外でそれらを参照することはできません。
一言で言えば、リンケージ。static
関数には内部リンケージがあります。つまり、翻訳単位の外では見えません。