3

初期化されたメンバーをオブジェクトとしてメモリに格納する必要がある方法で使用する場合(およびその場合のみ)、メンバーは(一意に)どこかに定義する必要があります。

「C++プログラミング言語」より

クラスがあります

class Bingo{
      std::string name;
    public:
      Bingo(){}
      int i;
      static const int i89=89;
};

そして私は次のような定義を持つ必要はありません:

const int Bingo::i89;

必要に応じて説明します。ですからどうやらわかりません。その引用の意味を教えてください。

4

2 に答える 2

2

クラス内でメンバーを定義すると、それはIn-class Initializationと呼ばれます。

このようなメンバーは、コンパイラによってコンパイル時の定数として扱われることに注意してください。これは、値がいつでも変更されないことがわかっているため、独自の最適化マジックを適用して、そのようなクラス メンバーを単純にインライン化できるためです。つまり、それらはメモリに格納されなくなります。それらはメモリに格納されていないため、そのようなメンバーのアドレスを取得することはできません。逆もまた同様です。

上記は、各 C++ オブジェクトには一意の定義が必要であり、したがって、一意のアドレスを持ち、一意に識別できるように、各オブジェクトをメモリに格納する必要があるという Bjarne の理論的根拠に従います。

したがって、引用は、

初期化されたメンバーをオブジェクトとしてメモリに格納する必要がある場合にのみ、そのメンバーをどこかで (一意に) 定義する必要があります。

于 2012-11-26T03:32:06.180 に答える
0

私が覚えている限りでは、静的変数がクラスで定義されているときに :: にアクセスする必要があります

于 2012-11-26T03:04:49.737 に答える