汇总目录请点击访问:《编程千问目录》

首先欢迎投稿,有任何编程问题均可私信或者评论留言。问题被采纳后你会收获上电视私信解答提醒
喜欢内容的话欢迎关注、点赞、收藏!感谢支持,祝大家祉猷并茂,顺遂无虞

在这里插入图片描述

第十三问:C++中静态变量的用法有哪些?

1. 静态变量(Static Variables)

用法:

  • 在函数内部定义的静态变量在函数调用之间保持其值。
  • 在类中定义的静态成员变量属于类而不是对象。

代码示例:

#include <iostream>

void foo() {
    static int count = 0; // 静态局部变量
    count++;
    std::cout << "Count: " << count << std::endl;
}

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

int MyClass::staticVar = 10; // 静态成员变量定义

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

    MyClass obj1, obj2;
    std::cout << "Static Var: " << obj1.staticVar << std::endl; // 输出 Static Var: 10
    obj1.staticVar = 20;
    std::cout << "Static Var: " << obj2.staticVar << std::endl; // 输出 Static Var: 20
    return 0;
}

原理:

  • 静态局部变量在程序开始时初始化一次,之后的函数调用不会重新初始化。
  • 静态成员变量在类中声明,但在类外定义,属于类而不是对象,所有的对象共享同一个静态成员变量。

2. 静态函数(Static Functions)

用法:

  • 静态成员函数不能访问非静态成员变量或调用非静态成员函数。
  • 静态成员函数可以直接通过类名调用。

代码示例:

#include <iostream>

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

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

int main() {
    MyClass::staticFunction(); // 直接通过类名调用静态函数
    MyClass obj;
    obj.nonStaticFunction(); // 通过对象调用非静态函数
    return 0;
}

原理:

  • 静态成员函数没有this指针,因为它们不与任何对象实例相关联。
  • 静态函数可以访问静态成员变量,但不能访问非静态成员变量。

3. 静态链接(Static Linkage)

用法:

  • 在全局作用域或命名空间作用域内定义的静态变量或函数具有内部链接,只能在定义它们的文件内访问。

代码示例:

// file1.cpp
static int globalVar = 10; // 静态全局变量

void func() {
    std::cout << globalVar << std::endl;
}

// file2.cpp
// 这里无法访问file1.cpp中的globalVar

原理:

  • 静态链接的变量或函数在编译时被限制在当前文件内,防止命名冲突。

总结

Static in C++
Static Variables
Static Functions
Static Linkage
Function Local Static
Class Static Member
Class Static Member Function
Cannot Access Non-Static Members
Internal Linkage
File Scope

欢迎关注、点赞、收藏!更多系列内容可以点击专栏目录订阅,感谢支持,再次祝大家祉猷并茂,顺遂无虞
在这里插入图片描述

若将文章用作它处,请一定注明出处,商用请私信联系我!