static关键字作用

一. 主要作用

  1. 隐藏
    当同时编译多个文件时,所有未加static前缀的全局变量和函数都全局可见
  2. 保持变量内容持久
    存储在静态数据区,程序开始运行时就完成初始化
  3. 默认初始化为0

二. 类外:

全局静态变量

参考主要作用

局部静态变量

局部静态变量是在程序执行到该对象的声明处时首次初始化,后面函数调用不再进行初始化

int fun()
{
    static int f1 = 0;
    f1 += 1;
    return f1;
}

int main(int argc, char** argv)
{
    for (int i = 0; i < 5; i++) {
        int val = fun();
        cout << val << endl;//1 2 3 4 5 
    }
    return 0;
}

静态函数:

#include <iostream>

// 声明一个普通函数
void ordinaryFunction() {
    std::cout << "This is an ordinary function." << std::endl;
}

// 声明一个静态函数
static void staticFunction() {
    std::cout << "This is a static function." << std::endl;

    // 在静态函数中调用普通函数
    ordinaryFunction();

    // 在静态函数中访问普通变量
    int x = 10;
    std::cout << "Value of x: " << x << std::endl;
}

int main() {
    // 调用静态函数
    staticFunction();
    return 0;
}

静态函数和普通函数的区别?

静态函数在内存中只有一份,普通静态函数在每个调用中位置一份拷贝程序的局部变量在堆栈中

三. 类内:

静态成员变量

  1. 静态成员变量必须在类声明的外部初始化。

  2. 静态成员变量是在初始化时分配内存的,程序结束时释放内存。

  3. 静态成员变量可以通过类名或对象名来引用,非静态成员变量只能通过对象名引用。

#include <iostream>

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

// 在类外部初始化静态成员变量
int MyClass::staticVar = 5;

int main() {
    std::cout << "Static variable: " << MyClass::staticVar << std::endl;
    return 0;
}

静态成员函数

  1. 静态成员函数中不可以定义 this、super 关键字。

  2. 静态成员函数只能访问静态成员,非静态成员函数既可访问静态成员也可访问非静态成员。

  3. 静态成员函数可以通过类名或对象名来引用,非静态成员函数只能通过对象名引用

#include <iostream>

class MyClass {
public:
    // 声明静态成员函数
    static void staticMemberFunction() {
        std::cout << "This is a static member function." << std::endl;
    }
};

int main() {
    // 直接通过类名调用静态成员函数
    MyClass::staticMemberFunction();
    return 0;
}

静态成员属于类本身,而不属于对象,如何理解?

  1. 共享性:静态成员被所有类的对象共享,他不是存储在对象中,而是存储在内存空间中
  2. 访问权限:静态成员可以访问类的所有私有成员,应为他们属于类本身

参考鸣谢
阿秀的学习笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值