类的静态函数和类的构造函数之间是什么关系?

| 每次在类上调用静态函数时会发生什么?构造函数何时执行?     
已邀请:
没有依赖关系,也就是说,您可以在不使用语法\“ Class :: method()\”构造实例的情况下调用静态方法。
class someclass
{
public:
    someclass()
    {
        std::cout << \"someclass constructor\" << std::endl;
    }

    static void staticmethod()
    {
        std::cout << \"someclass staticmethod\" << std::endl;
    }
};
接着
int main(int argc, char** argv)
{
    someclass::staticmethod();
    return 0;
}
您将看到打印出的“ someclass staticmethod”,没有提及或不需要调用构造函数。     
创建对象时将调用构造函数。 类的静态方法基本上是即时独立的。换句话说,该方法不保留单个对象的值,这些值在所有对象之间共享     
静态成员函数的背景 即使尚未创建该类的对象实例,也可以随时调用“ 2”个成员函数。调用它们时: 它们不会像非静态成员函数那样接收隐式“ 3”指针 因此,它们不会隐式自动知道是否有该类的任何实例,更不用说在内存中的实例了。 它们可以处理静态成员变量,这些成员变量同样独立于对象实例。 要理解以上内容,可能会有助于想象一个类或结构的静态成员类似于独立的非成员,除了: 静态成员与班级之间有效地建立了友谊 静态成员位于类的范围内,目的是查找标识符以匹配函数调用或查找变量 静态成员可以在该范围内受保护或私有 因此,它们是非成员和成员行为的混合体。 对象构造如何与静态/非静态成员和线程相关 对象的构造函数可以使用类的静态成员,可以调用函数或使用变量。但是,请记住,静态成员变量就像单个全局变量一样,只是它在类的命名范围之内:任何使用该变量的代码-无论该代码是静态成员,非静态成员函数还是非成员函数-必须使用变量与其他代码配合使用,因为该值是共享的。如果您编写多线程代码,则需要像使用非成员变量一样完全使用互斥量或类似方法来保护它。 静态成员变量的构造 我认为您可能会想到一个关键问题:何时调用静态成员变量的构造函数?根据标准9.4.2(我在这里引用C ++ 98最终草案):   -7-静态数据成员的初始化和销毁​​方式与非本地对象(basic.start.init,basic.start.term)完全相同。 最重要的是,最坏/最新的情况在3.6.2中描述: -3-由实现定义,是否在main的第一条语句之前完成名称空间范围对象的动态初始化(dcl.init,class.static,class.ctor,class.expl.init)。如果将初始化推迟到main的第一条语句之后的某个时间点,则应在首次使用与要初始化的对象相同的转换单元中定义的任何函数或对象之前进行。     
定义该类的\'static \'函数只有一个副本...也就是说,该类的所有对象共享相同的\'static \'函数。 仅当创建该类的对象时才调用构造函数。对于c ++,当您使用
new
运算符创建该类的对象时,将调用构造函数。 要调用静态方法,您需要使用“作用域解析”运算符(::)并使用类名来限定方法名称。但是,对于构造函数,将使用\“ new \”运算符自动调用该方法。 希望这可以帮助。     
实例化对象时执行构造函数。     
对于类方法,静态表示可以在类本身上调用此方法,使用该方法无需该类的实例 对于基本C / C ++程序中的函数,静态函数是仅对同一文件中的其他函数可见的函数     

要回复问题请先登录注册