c++初始化和赋值的区别
静态对象的声明及初始化不是赋值
声明(并缺省初始化)后再赋值
#include <iostream>
#include <string>
void fun(std::string input)
{
static int x; // 声明(及缺省初始化),因为声明为静态对象,所以只执行一次
x = 3; // 赋值, 第二次fun()被调用依然会被执行
std::cout << input << ": " << x << std::endl;
x = 4;
}
int main()
{
fun("first");
fun("second");
}
>>>
first: 3
second: 3
声明并初始化后不赋值
#include <iostream>
#include <string>
void fun(std::string input)
{
static int x = 3; // 声明并初始化为3,因为声明为静态对象,所以只执行一次
std::cout << input << ": " << x << std::endl;
x = 4;
}
int main()
{
fun("first");
fun("second");
}
>>>
first: 3
second: 4
如果不声明为静态对象:
#include <iostream>
#include <string>
void fun(std::string input)
{
int x = 3;
std::cout << input << ": " << x << std::endl;
x = 4;
}
int main()
{
fun("first");
fun("second");
}
>>>
first: 3
second: 3