1

私は C 開発者で、最近 C++ に切り替えたばかりなので、名前空間は新たに学ぶべきものです。A クラスには静的メソッド validate() があるため、A クラスの静的変数または定数にのみアクセスできます。しかし、A.cpp に名前空間で定義された定数がある場合、val() はその定数を使用でき、以下のコードは適切にコンパイルされています。

ああ

class A
{
    public:
    A();
    static bool validate(const int num);
};

A::A()
{
    // Do nothing. Just an example.
}

A.cpp

namespace A_local_constants
{
    const int val = 1;
}

using namespace A_local_constants;

bool A::validate(const int num)
{
    return (num == val);
}

だから私の質問は:

  1. 静的関数 validate() が非静的定数 val を使用できるのはなぜですか?

  2. val はメモリ内のどこに作成されますか?

  3. この定数はどの範囲ですか?

  4. Aオブジェクトが作成されずに常にメモリに作成されますか?

4

1 に答える 1

1

1) 「名前空間 A_local_constants を使用する;」このステートメントは、A_local_constants 内で定義されたすべてのシンボルを引き出します。したがって、bool A::validate(const int num) は val を参照できます。

2) グローバルメモリ

3) この定数のスコープは A_local_constants 内にあり、「名前空間 A_local_constants を使用する」または「名前空間 A_local_constants::val を使用する」を使用するすべての場所で表示されます。

4) クラス A と定数 val の間には関係がありません。

注: 「using namespace some_name_space」は、現在の名前空間を不必要に汚染する可能性があるため、慎重に使用する必要があります。

于 2013-04-19T16:44:50.463 に答える