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
posted @ 2022-08-12 10:02  levylaw  阅读(45)  评论(0编辑  收藏  举报