0

グローバル変数とオブジェクトに静的な保存期間と外部リンケージがある場合は?

関数には静的ストレージ期間と外部リンケージもありますか?

構造体とクラスと列挙子(私が知っている外部リンケージがあります)/ユニオンはどうですか?

ストレージ期間もリンケージもないと考えましたが、(グローバル)関数にはデフォルトで外部リンケージがあると思いましたが、クラススコープを持つクラスでは内部リンケージがありますか?

4

2 に答える 2

2

保存期間とリンケージは無関係な概念です。

関数はストレージに存在しないため、関数には「ストレージ期間」がありません。保存期間があるのはオブジェクトのみです。型はストレージにも存在しないため、型に保存期間がありません。

一般に、クラスにリンケージがないと言うのは正しくありません。名前空間スコープで宣言された名前付きクラスには、外部リンケージがあります。外部リンケージを持つクラスのメンバー関数にも外部リンケージがあります。ローカルに宣言されたクラスと名前のないクラスにはリンケージがありません。

于 2013-10-06T07:23:44.083 に答える
0

関数には公式には保存期間がありませんが、本質的には静的です (つまり、すべての関数はプログラムの全期間にわたって存在します)。それらを定義した場合、staticまたは匿名の名前空間内で定義した場合は内部リンケージがあり、それ以外の場合は外部リンケージがあります。

ストレージ クラスは、クラス、構造体、共用体などの型定義ではなく、オブジェクトに適用されます。同じクラスの 2 つのオブジェクトが存在することはよくあることです。1 つは静的ストレージ期間で、もう 1 つは自動ストレージ期間です。

同様に、内部リンケージを持つ 1 つのオブジェクトと外部リンケージを持つ別のオブジェクトを作成できます。

T x;
static T y;

同じことがクラスのリンケージにも当てはまります。

class X { }; // external linkage

namespace { 
   class Y {}; // internal linkage
};
于 2013-10-06T07:33:17.520 に答える