web-dev-qa-db-ja.com

C ++静的ローカル関数とグローバル関数

ファイルに静的関数を持つことのユーティリティは何ですか?

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

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

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

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

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

ファイルにグローバル関数を持つこととはどう違いますか?

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

37
dasblinkenlight

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

namespace {

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

}

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

13
Charles Salvia

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

詳細はこちら

3

Wordでは、リンケージ。 static関数には内部リンケージがあります。つまり、変換単位の外部からは見えません。

3
Yuushi