【C++】static关键字详细介绍

在C++中,static 是一个关键字,它可以用于多种不同的上下文中,具有不同的含义。下面我将分别介绍 static 在不同情况下的用法:

1.静态局部变量:

在函数内部声明的变量前加上 static 关键字,就创建了一个静态局部变量。静态局部变量在程序执行期间只被初始化一次,并且在函数调用结束后,其值会被保留下来,下次调用函数时会继续使用上次保留的值。静态局部变量的生命周期与程序的整个运行周期相同。

示例:

#include <iostream>

void foo() {
    static int count = 0;
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    foo(); // 输出 Count: 1
    foo(); // 输出 Count: 2
    foo(); // 输出 Count: 3
    return 0;
}

2.静态全局变量:

在全局作用域(即在所有函数之外)声明的变量前加上 static 关键字,就创建了一个静态全局变量。静态全局变量的作用域仅限于当前源文件,其他源文件无法访问它,即它具有内部链接(internal linkage)。

示例:

// File1.cpp
#include <iostream>

static int count = 0; // 静态全局变量,只能在当前源文件中访问

void foo() {
    count++;
    std::cout << "Count: " << count << std::endl;
}

// File2.cpp
#include <iostream>

extern int count; // 在其他源文件中使用 extern 声明外部变量
void bar() {
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    foo(); // 输出 Count: 1
    bar(); // 输出 Count: 2
    return 0;
}

3.静态成员变量:

在类中声明的变量前加上 static 关键字,就创建了一个静态成员变量,它被该类的所有对象共享,而不是每个对象都有一份。静态成员变量必须在类的定义外部进行初始化。

示例:

#include <iostream>

class MyClass {
public:
    static int count; // 静态成员变量声明
};

int MyClass::count = 0; // 静态成员变量定义和初始化

int main() {
    MyClass obj1;
    MyClass obj2;

    obj1.count++; // 等价于 MyClass::count++
    std::cout << "Count: " << obj1.count << std::endl; // 输出 Count: 1

    obj2.count++; // 等价于 MyClass::count++
    std::cout << "Count: " << obj2.count << std::endl; // 输出 Count: 2

    std::cout << "Count: " << MyClass::count << std::endl; // 输出 Count: 2

    return 0;
}

4.静态成员函数:

在类中声明的成员函数前加上 static 关键字,就创建了一个静态成员函数。静态成员函数不依赖于任何特定的对象,可以直接通过类名调用。它不能访问类的非静态成员,也不能使用 this 指针。

示例:

#include <iostream>

class MyClass {
public:
    static void staticFunction() {
        std::cout << "This is a static member function." << std::endl;
    }

    void nonStaticFunction() {
        std::cout << "This is a non-static member function." << std::endl;
    }
};

int main() {
    MyClass::staticFunction(); // 输出 This is a static member function.

    MyClass obj;
    obj.nonStaticFunction(); // 输出 This is a non-static member function.

    return 0;
}

这就是 static 在 C++ 中的几种常见用法。它可以用于控制变量的生命周期、作用域和共享性,以及创建独立于对象的成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值