C++学习——static详解

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

文章目录

      • 1. 静态局部变量
      • 2. 静态全局变量
      • 3. 静态成员变量
      • 4. 静态成员函数
      • 注意事项:
      • 说白了

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修饰的变量,延长到程序运行结束后销毁)

你可能感兴趣的:(C/C++语言学习,c++,学习,java)