3

重複の可能性:
C ++のクラスのメンバーを参照するために、ドット、矢印、または二重コロンを使用するのはいつですか?

を使用して静的変数にアクセスしようとするとClass.Variable、エラーが発生しますが、アクセスしてもエラーは発生しError left of 'Variable' must have class/struct/unionませClass::Variableん。どちらの場合も、私はVariableインテリセンスを通り抜けます。この場合の.との違いは正確には何ですか?::

4

6 に答える 6

6

クラスの静的メンバーには、2つの方法でアクセスできます

(a)クラスのインスタンスの場合-. 例を使用しますobj.variable

(b)クラスのインスタンスなし-::例を使用class::variable

于 2011-07-18T10:34:13.120 に答える
2

.::クラス名のオブジェクトに使用されます。

 struct foo {
     int x;
     static int y;
 };

 foo bar;

 bar.x = 10; // ok
 bar.y = 20; // ok - but bad practice

 foo.x = 10; // WRONG foo is class name
 foo.y = 20; // WRONG foo is class name

 foo::x = 10; // WRONG x requires object
 foo::y = 20; // ok

ベストプラクティス:

 bar.x = 10; 
 foo::y = 20;
于 2011-07-18T10:32:27.303 に答える
0

これ::はクラス/名前空間スコープ用ですが、この場合、の左側.は変数である必要があります。これが機能することに注意してください。これが、Intellisenseが機能する理由である可能性があります。

Class x;
doSomething( x.Variable );
于 2011-07-18T10:33:40.833 に答える
0
Class::StaticProperty
InstanceOfClass.Property
于 2011-07-18T10:36:10.507 に答える
0

.インスタンス参照です(たとえば、LHSにはオブジェクトがあります)。 ::静的参照です。RHSにはタイプがあります。

于 2011-07-18T10:31:35.757 に答える
0

「クラスメンバーアクセス演算子」とも呼ばれるドット演算子には、クラス/構造体のインスタンスが必要です。

struct X
{
    static int x = 5;
    int y = 3;
}
namespace NS
{
    int z = 1;
}

void foo()
{
    X instance;
    instance.x;  // OK, class member access operator
    X::x;        // OK, qualified id-expression
    instance.y;  // OK
    X::y;        // Not OK, y is not static, needs an instance.
    NS.z;        // Not OK: NS is not an object
    NS::z;       // OK, qualified-id expression for a namespace member.
}

言葉遣いはC++0xFDISから取られています。

于 2011-07-18T10:32:05.343 に答える