静态局部变量和静态全局变量有什么区别?

2024-04-18

C++ 入门 说

每个局部静态变量在第一次之前都会被初始化 执行通过对象的定义。本地静态数据是 函数结束时不会被销毁;当程序运行时它们被销毁 终止。

局部静态变量与全局静态变量有什么不同吗?除了申报地点不同之外,还有什么不同呢?

void foo () {   
    static int x = 0;
    ++x;

    cout << x << endl;
}

int main (int argc, char const *argv[]) {
    foo();  // 1
    foo();  // 2
    foo();  // 3
    return 0;
}

与之比较

static int x = 0;

void foo () {   
    ++x;

    cout << x << endl;
}

int main (int argc, char const *argv[]) {
    foo();  // 1
    foo();  // 2
    foo();  // 3
    return 0;
}

差异是:

  • 该名称只能在函数内访问,并且没有链接。
  • 它在第一次执行到达定义时被初始化,不一定在程序的初始化阶段。

第二个区别有助于避免静态初始化顺序惨败,全局变量可以在初始化之前访问。通过用返回局部静态变量引用的函数替换全局变量,您可以保证它在任何内容访问它之前就已初始化。 (但是,仍然不能保证在任何东西完成访问它之前它不会被销毁;如果您认为需要一个全局可访问的变量,您仍然需要非常小心。请参阅注释link https://stackoverflow.com/a/335746/14065在这种情况下提供帮助。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态局部变量和静态全局变量有什么区别? 的相关文章

随机推荐

  • JPEG 标头丢失/损坏

    我有一个 130kb jpeg 图像 无法在任何程序中打开 我需要修复它 从我使用的各种图像恢复软件中 我得到的只是 图像头损坏 丢失 当我查找文件的属性时 我什至没有得到任何信息 没有尺寸等 只有文件大小 一旦图像的标头丢失 是否可以恢复
  • 如何在 Ruby 中进行模糊子字符串匹配?

    我发现了很多关于模糊匹配的链接 将一个字符串与另一个字符串进行比较 看看哪个字符串的相似度得分最高 我有一个很长的字符串 一个文档 和一个子字符串 子字符串来自原始文档 但已被转换多次 因此可能会引入奇怪的工件 例如这里有一个空格 那里有一
  • Neo4j 的数据库级验证

    我使用 Neo4j 作为我的图形数据库 假设我想限制用户名字段的长度小于10 有没有办法在数据库级别施加这样的约束 现在 您必须在应用程序级别上执行此操作 或者通过注册一个事务提交挂钩来检查该属性字段是否符合特定标准 See http do
  • 免费的 XSD 到 DTD 转换实用程序?

    我有一个 XSD XML 架构 需要将其转换为 DTD 有免费的实用程序或简单的方法来完成此任务吗 例如 XSLT Python 脚本也很受欢迎 Note 这是问题的相反方向免费 DTD 到 XSD 转换实用程序 https stackov
  • Akka Actor 询问和类型安全

    我如何使用 Akka Actor Ask 并维护类型安全 或者避免使用 询问 而使用 告诉 打电话时 or ask在 Akka Actor 上 Future Any 返回 我必须通过进行显式转换future mapTo MyType 我不喜
  • Android - 拥有多个共享首选项是不好的做法吗?

    我有一个应用程序使用SharedPreferences 一个仅存储应用程序版本以检查更改日志的更新 另一个包含一些布局信息clear 当用户选择时被调用 我终于设法得到了PreferenceFragment工作并注意到一种趋势 所以我想在我
  • Spring Boot:是否可以使用 fat jar 在任意目录中使用外部 application.properties 文件?

    是否可以有多个 application properties 文件 EDIT 请注意 这个问题演变成了标题上的问题 我尝试有2个文件 第一个位于应用程序 Jar 中的根文件夹中 第二个位于类路径中指定的目录中 2 个文件都命名为 appli
  • 创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server

    我想编写一个 SSIS 包 用于将数据从 Oracle 复制到 MS Sql 服务器 而且条件是 通过在 SQL 中选择一个表 就可以知道哪些数据必须从 oracle 移动到 SQL 基本上 如果 SQL Server 中的该表中没有该值
  • OpenCV 无法从网络摄像头捕获帧

    我在 VS2010 中使用 OpenCV 2 4 6 我认为我的网络摄像头无法捕获该帧 当我执行代码时 它构建成功 但我没有得到输出 我想 当我检查时if bSuccess 它已执行并且无法从网络摄像头捕获帧 我该如何解决这个问题 我的代码
  • 按数据框的子段对数据框进行排序

    我和我的团队正在处理数千个具有相似段的 URL 有些 URL 在我们感兴趣的位置有一个段 seg 复数 segs 其他类似的 URL 在我们感兴趣的位置上有不同的段 我们需要对由 URL 和关联的唯一段组成的数据框进行排序 在感兴趣的位置
  • 只为 IE 设置 CSS?

    我有一个简单的div具有 2px 厚的边框和绝对定位 直到其父元素悬停在其上方时才会隐藏 由于IE盒子模型 所说的位置div在 IE 中有些关闭 但在其他浏览器中则不然 我不想为 IE 添加完全独立的样式表 我只想在浏览者使用 IE 时修改
  • 如果您不打算从自适应渲染中受益,那么使用 HtmlTextWriter 有什么好处吗?

    除了从替代设备的自适应渲染中受益之外 编写所有这些代码是否有意义 writer WriteBeginTag table writer WriteBeginTag tr writer WriteBeginTag td writer Write
  • 将位串 numpy 数组转换为以 2 为基数的整数的最快方法

    我有一个由位串组成的 numpy 数组 我打算将位串转换为以 2 为基数的整数 以便执行一些异或按位运算 我可以在 python 中将字符串转换为以 2 为基数的整数 int 000011000 2 我想知道在 numpy 中是否有更快更好
  • 将两个 Map 合并为一个 MultiMap

    在 Java 中将两个 Map 组合成一个 Guava MultiMap 的最佳方法是什么 例如 Map1 包含 1 a 和 2 b Map2 包含 2 c 和 3 d 然后生成的组合多重贴图将包含 1 a 2 b c 和 3 d 这是我当
  • 如何在 Angular 中处理空值

    我正在向 Angular 发送数据 但记录的其中一个值 关闭日期 为空 我如何在 Angular 中处理这个问题 以便如果 value 为 null 它会更改为 getDetails this myService getFlowerDeta
  • Android NumberPicker with Formatter 在首次渲染时不会格式化

    我有一个 NumberPicker 它有一个格式化程序 可以在 NumberPicker 旋转或手动输入值时格式化显示的数字 这工作正常 但是当 NumberPicker 首次显示并且我用以下命令初始化它时setValue 0 0 不会被格
  • GCP Dataproc 作业未找到存储在存储桶中的 SSL pem 证书

    我有一个 GCP Dataproc 集群 我正在尝试部署一个 pyspark 作业 该作业使用 SSL 生成一个主题 pem 文件存储在存储桶 gs dataproc kafka code code 中 我正在使用下面所示的代码访问 pem
  • 使用日期的 MongoDB 聚合 $unwind $match - 我错过了什么?

    我是 MongoDB 的新手 我正在尝试使用聚合 我部分地做了我正在寻找的事情 但我对约会有一种奇怪的行为 MongoDB 信息 版本 2 2 0 操作系统 Windows 7 客观的 获取 2012 11 22 之后创建的所有评论 让我们
  • 移动应用程序的后台数据同步

    我们正在数据库之上构建 API 和移动应用程序 该数据库的主表中有数十万条记录 我们的移动开发人员正在努力推动应用程序在本地数据库中预加载完整的表 然后提供一项服务 让手机可以将更改与数据库同步updated at column 虽然这肯定
  • 静态局部变量和静态全局变量有什么区别?

    C 入门 说 每个局部静态变量在第一次之前都会被初始化 执行通过对象的定义 本地静态数据是 函数结束时不会被销毁 当程序运行时它们被销毁 终止 局部静态变量与全局静态变量有什么不同吗 除了申报地点不同之外 还有什么不同呢 void foo