1

C++ のクラス メンバーの静的参照について質問があります。同じクラスの非静的メンバーへのポインターである静的 const メンバーを作成するのは簡単です。このような:

class A {
public:
    int x;
private:
    static int A::* const ptr_on_x;
};

int A::* const ptr_on_x = &A::x;

今、私はそのようなものを書くことができない理由を理解できません。つまり、同じクラスの非静的メンバーの参照である静的 const メンバーを作成します。

//won't compile
class B {
public:
    int x;
private:
    static int B::& const ptr_on_x;
};

int B::& const ptr_on_x = B::x;

ポインターと参照の違いに関するSOのさまざまな投稿から、手がかりが見つかりません。それどころか、「参照はエイリアスのようなものだ」と読んだことさえあります。それで、私は何を誤解していますか?

同じクラス内でいくつかの変数エイリアスを定義することは可能ですか? 単純なクラスではあまり役に立たないように思えることは認めます。言語自体についての質問です。

また、私は C++0x についてあまり知らないので、C++0x はこれに対する解決策を提供していますか?

編集 MarcinŁoś のコメントは、私に別のアイデアを与えてくれます。関数参照が取れるので、クラスメソッドの参照であるクラスメンバを作成できますか?

4

2 に答える 2

3

単純に、メンバーへの参照のような型がなく、メンバーへのポインターのみがあるためです。

ポインターと参照の違いに関するSOのさまざまな投稿から、手がかりが見つかりません。

メンバーへのポインターは、その (少し誤解を招くような) 名前を除けば、ポインターとはほとんど関係がなく、ポインターのように他の何かを参照するという事実もあります。参照のように見える類似の型を追加するやむを得ない理由があるとは考えられていませんでした。

同じクラス内でいくつかの変数エイリアスを定義することは可能ですか?

いいえ、賢明な方法はありません。

また、私は C++0x についてあまり知らないので、C++0x はこれに対する解決策を提供していますか?

いいえ。

于 2013-09-05T12:38:47.573 に答える