2013-02-07 19 views

答えて

30

ファイル内に静的関数を持たせるユーティリティとは何ですか?

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

ファイル内でグローバル機能を持​​つ方法とどのように違いますか?

これらはリンカーには見えないため、他のコンパイル単位で同じシグネチャの関数を定義することができます。名前空間を使用すると、この問題はかなり緩和されますが、ファイル-は、Cプログラミング言語から継承された機能であるため、名前空間の前に機能します。

+0

グローバルな関数がデフォルトで外部にある、つまり "void fun(){}"が "extern void fun(){}"と同じであることを読んだときに、私はすべて明らかになりました。ヘッダーに記述すると、定義されている実装ファイル(定義されているポイントの下)でのみ使用できます。 –

+2

@Simon Knappプロトタイプを使ってさまざまなトランジションユニットで使用できます。 –

10

VS

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

static機能は、単にリンカー(すなわちtranslation units他にそれが見えるように)関数をエクスポートすることができないことを意味します。現在の翻訳単位に対して機能を「非公開」にします。これは、匿名の名前空間で関数をラップするのと同じです。

namespace { 

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

} 

は一般的に、匿名の名前空間を使用すると、これを達成するのではなく、staticキーワードを使用しての好適なC++の方法です。

+2

なぜそれが好ましいですか?それは私にとってもっと冗長なようです。 – rozina

3

スタティック関数は、定義されたファイルでのみ表示されます。 特定のファイルの外部には参照できません。ワードで

Read more here

2

、リンケージ。 static関数には内部リンケージがあります。つまり、翻訳単位の外側には表示されません。

関連する問題