声明是赋值是初始化,声明之后赋值才是赋值!初始化和赋值区别很大!看这个例子:
#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;
}
就为什么不同于静态变量直接赋初始值?
这不对吗?因为x=1每次都会被执行,而赋初值只会执行一次!