43

ファイルに静的関数を含めることの有用性は何ですか?

ファイル内にグローバル関数を持つこととどう違うのですか?

static int Square(int i)
{
   return i * i;
} 

int Square(int i)
{
   return i * i;
}
4

4 に答える 4

54

ファイルに静的関数を含めることの有用性は何ですか?

これらの関数を使用して、同じファイル内の他の関数に共有実装ロジックを提供できます。ファイルに固有のさまざまなヘルパー関数は、file-static と宣言するのに適した候補です。

ファイル内にグローバル関数を持つこととどう違うのですか?

これらはリンカからは見えないため、他のコンパイル ユニットが同じシグネチャを持つ関数を定義できます。名前空間を使用すると、この問題は大幅に軽減されますが、ファイルstatic関数は C プログラミング言語から継承された機能であるため、名前空間よりも前から存在します。

于 2013-02-07T02:46:56.140 に答える
24

static関数は、リンカが関数をエクスポートできないことを意味します (つまり、関数を他の翻訳単位から見えるようにします)。関数を現在の翻訳単位に対して「プライベート」にします。これは、匿名の名前空間で関数をラップするのと同じです。

namespace {

    int Square(int i)
    {
       return i * i;
    } 

}

一般に、匿名名前空間を使用することは、staticキーワードを使用する代わりに、これを達成するための推奨される C++ の方法です。

于 2013-02-07T02:46:47.357 に答える
4

静的関数は、それらが定義されたファイルでのみ表示されます。その特定のファイルの外でそれらを参照することはできません。

詳細はこちら

于 2013-02-07T02:47:06.807 に答える
4

一言で言えば、リンケージ。static関数には内部リンケージがあります。つまり、翻訳単位の外では見えません。

于 2013-02-07T02:47:42.790 に答える