legongju.com
我们一直在努力
2024-12-24 08:43 | 星期二

c++静态全局变量与普通全局变量的区别

C++中的静态全局变量和普通全局变量的主要区别在于它们的可见性和生命周期。

  1. 可见性:

    • 普通全局变量:在整个程序范围内都是可见的,可以在任何源文件中被访问和修改。
    • 静态全局变量:在定义它的源文件中可见,但在其他源文件中不可见。它们的作用域仅限于定义它们的源文件。
  2. 生命周期:

    • 普通全局变量:在程序启动时创建,程序结束时销毁。
    • 静态全局变量:在程序启动时创建,但只有在第一次进入定义它的源文件时才会被初始化。程序结束时销毁。

下面是一个简单的例子来说明这两者的区别:

// file1.cpp
#include 

// 普通全局变量
int globalVar = 10;

// 静态全局变量
static int staticGlobalVar = 20;

void printGlobalVar() {
    std::cout << "Global variable: " << globalVar << std::endl;
}

void printStaticGlobalVar() {
    std::cout << "Static global variable: " << staticGlobalVar << std::endl;
}

int main() {
    printGlobalVar(); // 输出:Global variable: 10
    printStaticGlobalVar(); // 输出:Static global variable: 20
    return 0;
}

在这个例子中,globalVar 是一个普通全局变量,它在整个程序范围内都是可见的。而 staticGlobalVar 是一个静态全局变量,它只在 file1.cpp 源文件中可见。当我们尝试在其他源文件中访问这些变量时,编译器会报错。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/43425.html

相关推荐

  • c# doevents能处理异常吗

    c# doevents能处理异常吗

    DoEvents() 是 Windows 窗体应用程序中的一个方法,用于处理消息队列中的消息。它可以处理一些与消息循环相关的消息,例如鼠标点击、键盘输入等。然而,DoEvents...

  • c# doevents能用于异步吗

    c# doevents能用于异步吗

    DoEvents() 是一个在 Windows Forms 应用程序中用于处理消息队列的函数。它允许应用程序在等待某个操作完成时继续执行其他任务,例如响应用户输入或处理其他事件...

  • c# doevents能替代await吗

    c# doevents能替代await吗

    DoEvents() 不能替代 await。它们在 C# 中用于不同的目的。
    DoEvents() 是一个 Windows API 函数,用于处理消息队列中的消息。它允许你的应用程序在等待某个...

  • c# doevents能用于多线程吗

    c# doevents能用于多线程吗

    在C#中,DoEvents()方法主要用于处理消息队列中的消息,例如鼠标点击、键盘输入等。它通常与Windows窗体应用程序一起使用,而不是多线程环境。
    在多线程环境...

  • c++静态全局变量的访问权限如何设置

    c++静态全局变量的访问权限如何设置

    在C++中,静态全局变量的访问权限可以通过以下方式设置: 默认访问权限(即文件作用域):如果不对静态全局变量显式指定访问修饰符,那么它的访问权限默认为“文...

  • c++静态全局变量的内存分配机制

    c++静态全局变量的内存分配机制

    在C++中,静态全局变量在程序的生命周期内只分配一次内存。它们的内存分配机制如下: 在程序开始执行之前,编译器会处理静态全局变量的初始化。这意味着在main()...

  • c++静态全局变量在多线程中的表现

    c++静态全局变量在多线程中的表现

    在C++中,静态全局变量在多线程环境下的表现主要涉及到线程安全和初始化顺序问题。 线程安全:静态全局变量在多线程环境下可能会导致数据竞争(data race)和不一...

  • c++静态全局变量的生命周期是怎样的

    c++静态全局变量的生命周期是怎样的

    C++ 静态全局变量的生命周期是整个程序的运行期间。从程序开始执行时,静态全局变量被初始化,直到程序结束时才被销毁。
    在程序执行过程中,静态全局变量的...