静态变量先定义(但不赋值),然后再赋值为什么会这样?

img

声明是赋值是初始化,声明之后赋值才是赋值!初始化和赋值区别很大!看这个例子:

#include<iostream>
class MyClass
{
public:
    MyClass()
    {
        std::cout << "无参构造函数被调用" << std::endl;
    }
    MyClass(int x)
    {
        std::cout << "有参构造函数被调用" << x << std::endl;
    }
    void operator=(int x)
    {
        std::cout << "operator=被调用" << x << std::endl;
    }
};
static void func(int t)
{
    std::cout << "第" << t << "次调用func" << std::endl;
    static MyClass a = 10;//初始化,隐式调用构造函数,不是赋值!
    static MyClass b;//调用无参构造函数
    b = 20;//赋值,调用operator=,和初始化不一样!
}
int main()
{
    func(1);
    func(2);
    return 0;
}

img


懂?

就为什么不同于静态变量直接赋初始值?

这不对吗?因为x=1每次都会被执行,而赋初值只会执行一次!