类中的C++静态成员
答
您还可以通过空指针调用静态方法。下面的代码将工作,但请不要使用它:)
struct Foo
{
static int boo() { return 2; }
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo* pFoo = NULL;
int b = pFoo->boo(); // b will now have the value 2
return 0;
}
答
是的:
class mytoolbox
{
public:
static void fun1()
{
//
}
static void fun2()
{
//
}
static int number = 0;
};
...
int main()
{
mytoolbox::fun1();
mytoolbox::number = 3;
...
}
答
是的,这恰恰意味着什么static
类成员:
struct Foo {
static int x;
};
int Foo::x;
int main() {
Foo::x = 123;
}
+0
此外,请参阅http://www.acm.org/crossroads/xrds2-4/ovp.html#SECTION00040000000000000000以获取有关C++中静态数据的有趣阅读。 – 2009-10-28 21:52:27
答
在简而言之,是的。
只要将一个静态成员调用到任意位置,只需将该类名称视为一个名称空间即可。
class Something
{
static int a;
};
// Somewhere in the code
cout << Something::a;
+0
只能在语法上下文中将类名称视为命名空间,而不能以任何其他方式处理。 – 2009-10-28 21:47:52
答
在另一方面,这就是命名空间是为:
namespace toolbox
{
void fun1();
void fun2();
}
的静态函数的类的唯一用途是用于政策类。
从技术上讲,这是未定义的行为。出于任何原因你不能引用空指针。你可以用空指针做的唯一的事情是:a)为它指定另一个指针,并且b)将它与另一个指针进行比较。 – KeithB 2009-11-30 16:43:36
在访问成员的情况下,该/ pFoo指针将取消引用。静态函数不访问成员,也没有成员。即使非虚拟方法也可以毫无例外地通过空指针来调用。他们只在访问成员时崩溃。任何人都应该知道并接受这个以寻找一些奇怪的错误。 – 2012-03-28 07:48:11