可能重复:
When do I use a dot, arrow, or double colon to refer to members of a class in C++?
当我尝试使用Class.Variable
访问我的静态变量时,我收到错误Error left of 'Variable' must have class/struct/union
,当我Class::Variable
时,我没有收到任何错误。虽然在这两种情况下我通过intellisense获得Variable
。在这种情况下,.
和::
之间究竟有什么不同?
答案 0 :(得分:6)
可以通过两种方式访问类的静态成员
(a)使用课程实例 - 使用.
例如obj.variable
(b)没有课程实例 - 使用::
,例如class::variable
答案 1 :(得分: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;
答案 2 :(得分:0)
.
是一个实例引用(例如,在LHS上有一个对象)。 ::
是静态参考。在RHS上有一种类型。
答案 3 :(得分: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 ++ 0x FDIS。
答案 4 :(得分:0)
::
用于类/命名空间范围,但在这种情况下,.
的左侧必须是变量。请注意,这可能会有效,这可能就是为什么Intellisense适合您的原因:
Class x;
doSomething( x.Variable );
答案 5 :(得分:0)
Class::StaticProperty
InstanceOfClass.Property