1

cでのリンケージと比較して、c ++リンケージでの名前空間の影響は何ですか?

名前空間を使用するだけで、外部リンケージへの内部リンケージを持つ名前を作成することは可能ですか? 同様にその逆です。

4

2 に答える 2

3

一般に、ネームスペース名は、名前がマングルされてリンカーに渡される前に、囲まれたエンティティの名前の前に追加されます。

異なる名前空間に同じ署名を持つ 2 つの関数がある場合、それらは 1 つのファイルにリンクされます。同じ名前の 2 つのクラスと同じシグネチャの少なくとも 1 つのメソッドがあり、これらのクラスが異なる名前空間にある場合、これらのクラスは再び正常にリンクされます。

于 2009-03-09T14:48:26.427 に答える
1

C と C++ の両方で、オブジェクトと関数に静的ファイル リンケージ (内部リンケージとも呼ばれる) を持たせることができます。C++ は、ファイル スコープの代わりに名前のない名前空間の使用をサポートします。これは、コンパイラの利点です。static はリンケージ修飾子です。したがって、ファイル スコープと内部リンケージが必要な場合は、C++ で名前空間と静的の両方を使用する必要があります。ただし、C では、同じことを達成するために static キーワードのみが必要です。

/* C and C++ code */

static int  bufsize = 1024;
static int  counter = 0;

static long square(long x)
{
    return (x * x);
}

C++ でこれを行うための推奨される方法:

 // C++ code
namespace /*unnamed*/
{
    static int  bufsize = 1024;
    static int  counter = 0;

    static long square(long x)
    {
        return (x * x);
    } 

}
于 2009-03-09T14:51:15.810 に答える