C++学习——static详解

在C++中,static关键字有几种不同的用途,它可以用来控制变量的存储期限、函数的链接属性以及类成员的可见性和生命周期。以下是static关键字的几种主要用法:

1. 静态局部变量

static用于局部变量时,它改变了局部变量的存储期限。通常局部变量仅在函数调用期间存在,但静态局部变量在程序执行开始时就分配空间,并且直到程序执行结束才释放。这意味着即使函数返回,静态局部变量的值也会被保留。

void func() {
    static int count = 0; // 分配在程序生命周期内持续的空间
    count++;
    std::cout << count << std::endl;
}
// 每次调用func,count的值都会增加,因为它在函数调用之间保持状态。

2. 静态全局变量

全局变量前的static关键字限制了该变量的链接属性,使其只在声明它的文件内可见,这被称为内部链接。没有static的全局变量具有外部链接,可以在其他文件中使用extern关键字来引用。

// file1.cpp
static int globalVar = 42; // 内部链接,仅在此文件中可见
// file2.cpp
// extern int globalVar; // 错误,无法访问file1.cpp中的static变量

3. 静态成员变量

在类中,static关键字可以用来声明静态成员变量。静态成员变量属于类本身,而不是类的任何一个对象。因此,所有的对象共享同一个静态成员变量,并且可以在不创建类的实例的情况下访问它。

class MyClass {
public:
    static int staticVar; // 声明静态成员变量
};
int MyClass::staticVar = 10; // 定义并初始化静态成员变量
// 访问静态成员变量
std::cout << MyClass::staticVar << std::endl;

4. 静态成员函数

静态成员函数与静态成员变量类似,它们属于类本身而不是类的实例。静态成员函数只能访问静态成员变量和其他静态成员函数,因为它们没有this指针。

class MyClass {
public:
    static void staticFunc() {
        std::cout << "Static function called." << std::endl;
    }
};
// 调用静态成员函数
MyClass::staticFunc();

注意事项:

  • 静态局部变量只初始化一次,在程序开始时或者第一次进入函数时。
  • 静态全局变量和静态局部变量如果没有显式初始化,会被自动初始化为0。
  • 静态成员变量必须在类定义之外定义和初始化。
  • 静态成员函数不能访问非静态成员变量或函数,因为它们没有this指针。
    正确使用static关键字可以在C++程序设计中带来很多便利,如节省资源、隐藏实现细节等,但同时也需要注意它所带来的作用域和链接属性的变化。

说白了

  1. static时c++的关键字,在众多编程语言都有运用
  2. static表示静态(将内容存入静态内存区域),可以修饰变量和函数
  3. 用static修饰变量,比如说函数内部的局部变量,可以延长其生命周期(原来的函数内局部变量:函数运行结束后销毁;而函数内用static修饰的变量,延长到程序运行结束后销毁)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qhumaing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值