C++ 中的普通函数(而不是静态函数)是否只有一个类的副本,这意味着所有对象都引用同一个副本。如果是这样,普通函数和静态函数有什么区别?另外,我的老师说我们不能使用“(object_name).(func_name)”表示法调用类的静态函数,而必须使用“class_name::(func_name)”来调用它,而我明白这是逻辑上的要做的事情,但就语言而言,我是否不允许使用 (object_name).(func_name) 表示法调用静态函数?最后,我是否可以在类的构造函数中或该类的任何其他函数内初始化类的静态数据成员,而必须从类外部执行此操作?
如果只有一份副本意味着所有函数在内存中都具有相同的位置,那么是的,你是对的。不同之处在于静态函数不需要实例化对象才能被调用。这也意味着您无法访问该类的其他非静态成员。
至于初始化,您不能在构造函数中执行此操作,因为调用访问静态成员的静态函数需要事先调用构造函数。没有办法保证这一点。您可以更改构造函数内的静态,但必须在其他地方对其进行初始化。
想想这个场景:
class A
{
static int x;
public:
A()
{
x = 3;
}
static int getX()
{
return x;
}
}
int main()
{
A::getX(); //what would x be here? It hasn't been initialized since A() was not called.
}
Run Code Online (Sandbox Code Playgroud)
至于用 (object).(function) 而不是 (class)::(function) 调用函数,我相信你可以这样做,但为什么要这么做呢?