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