当前位置: 首页 > news >正文

C++ static 修饰全局变量时的作用探究

C++ static 修饰全局变量时的作用探究

作为一个c++开发者,我们面试时经常被问到 static 变量的作用,其中有一个问题是,static 修饰全局变量时起什么作用

通常我们会回答,“static 修饰全局变量时代表限制这个变量为此源文件可见,其他源文件无法访问到这个变量“。

但是之前我更多的是认为重点在于限制作用域,今天的一个小实验让我对它有了更深入的体会。
这里先问一个问题。

如果我们 在 某个头文件中声明一个 static 变量,然后用两个 source file 来引用它,可以做到共享全局变量通信吗?换句话说,某个 cpp 文件改动了它的值,另一个cpp能感知到吗?

答案是不会,实验表明,每一个源文件单独有一份属于自己的static 变量,所以一个源文件的更改不会影响到另一个源文件,这正是面试八股文里 “限制变量为本源文件可见的真正含义”。

  • 头文件 schema.h
#ifndef __SCHEMA__
#define __SCHEMA__
#include <string>static std::string input_schema = R"(this is input schema)";#endif
  • 源文件 A help.cpp
#include "help.hpp"#include <iostream>
using namespace std;
void change_input() {input_schema = "new input schema";return;
}void show_input() {cout << "help.cpp: " << input_schema << endl;cout << "help.cpp: " << &input_schema << endl;return;
}
  • 源文件 B main.cpp
#include <iostream>#include "help.hpp"
// #include "schema.h"
using namespace std;int main() {cout << "main.cpp: " << input_schema << endl;change_input();cout << "main.cpp: " << input_schema << endl;show_input();// 打印地址cout << "main.cpp: " << &input_schema << endl;return 0;
}

输出

main.cpp: this is input schema
main.cpp: this is input schema
help.cpp: new input schema
help.cpp: 0x5631f26841a0
main.cpp: 0x5631f2684180

可以看出, 源文件A(help.cpp) 对 input_schema 的修改只有它自身感知到了,没有影响到 源文件B.
从打印的地址也可以看出,这是两个变量。

http://www.lryc.cn/news/297937.html

相关文章:

  • Git的基础操作指令
  • 前端开发:(四)JavaScript入门
  • js文件忽略ESLint语法检查
  • 【深度学习】:实验6布置,图像自然语言描述生成(让计算机“看图说话”)
  • 内网安全-内网穿透
  • 【Make编译控制 01】程序编译与执行
  • MySQL如何定位慢查询
  • npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并进行内容修改
  • Linux开发:PAM1 介绍
  • Leetcode 3036. Number of Subarrays That Match a Pattern II
  • 华为环网双机接入IPTV网络部署案例
  • “智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】
  • 牛客网SQL进阶137:第二快/慢用时之差大于试卷时长一半的试卷
  • CVE-2022-0760 漏洞复现
  • WordPress突然后台无法管理问题
  • STM32F1 - 标准外设库_规范
  • 推荐系统|召回04_离散特征处理
  • 一个查看armv8系统寄存器-值-含义的方式
  • LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略
  • npm 下载报错
  • GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新
  • 【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】
  • MongoDB系列:管道操作:聚合阶段操作符(二)
  • C++ //练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。
  • C语言-----自定义类型-----结构体枚举联合
  • elasticsearch下载及可视化工具下载使用
  • vim常用命令以及配置文件
  • 2024年的VUE2下的无效指令npm install --save vue-i18n
  • 计算机视觉主要知识点
  • python 基础知识点(蓝桥杯python科目个人复习计划35)