C++中static修饰符的详解及其作用介绍

C++中static修饰符的详解及其作用介绍

什么是static修饰符

在C++中,static是一个关键字,它可以用来修饰变量、函数、类和成员变量等。使用static修饰符可以改变变量、函数、类和成员变量的作用范围和生命周期。

static修饰符的作用

静态变量

使用static修饰变量可以使该变量具有静态存储方式,即在程序的整个生命周期中,该变量只会被分配一次内存空间,所有的实例都共享同一块内存,从而实现不同实例之间共享变量值的效果。

示例代码:

#include <iostream>
using namespace std;

void increment(){
  static int x = 0;
  x++;
  cout << x << endl;
}

int main(){
  increment(); //输出 1
  increment(); //输出 2
  increment(); //输出 3
  return 0;
}

上面的代码定义了一个increment函数,其中x变量使用static修饰。当函数第一次被调用执行时,x被初始化为0,然后在函数的执行过程中,每次调用时,x的值都会自增1,并输出x的值。由于x是静态变量,因此每次调用increment函数时,x的值都是在上一次的基础上自增1的。这就实现了从函数调用第一次开始,一直对x值进行累加的效果。

静态函数

使用static修饰函数可以将函数的作用域从整个文件扩大到整个程序,即使多个文件都包含了这个函数,这个函数也只会在编译时被分配一次内存空间,避免了函数名冲突,同时也很好地隐藏了函数实现的细节。

示例代码:

#include <iostream>
using namespace std;

class Test{
  public:
    static void print(){
      cout << "Hello World!" << endl;
    }
};

int main(){
  Test::print(); //输出 "Hello World!"
  return 0;
}

上面的代码定义了一个Test类,其中print函数使用static修饰。因此,print函数的作用域从整个类实例缩小到整个程序。即使在其他文件中也会保持作用。

静态成员变量

使用static修饰成员变量可以使该成员变量具有静态存储方式,这意味着该成员变量只会被分配一次内存空间,并在类的所有实例中共享,即所有对象共用同一块内存空间。

示例代码:

#include <iostream>
using namespace std;

class Test{
  public:
    static int num;
};

int Test::num = 0;

int main(){
  Test t1;
  Test t2;
  t1.num = 1;
  cout << t1.num << endl; //输出 1
  cout << t2.num << endl; //输出 1
  return 0;
}

上面的代码定义了一个Test类和一个静态成员变量num。由于num是静态成员变量,因此在类的所有实例中共享,即t1和t2对象共用同一块内存空间,所以当t1中的num变量的值改变时,t2中的num变量的值也会被改变。

总结

静态修饰符static可以改变变量、函数、类和成员变量的作用范围和生命周期。静态变量可以实现不同实例之间共享变量值,静态函数可以方便地隐藏函数实现的细节,而静态成员变量则可以在类的所有实例中共享。要注意静态成员变量的初始化,可以在类外初始化,也可以在类内初始化静态成员变量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中static修饰符的详解及其作用介绍 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 个人作业2:APP案例分析

    个人作业2:APP案例分析 引言 在移动互联网时代,APP已经成为人们生活中不可或缺的一部分。越来越多的企业选择通过开发APP来构建自己的在线业务,但是APP开发和运营需要考虑到很多因素,例如用户体验、功能需求、安全性等等。在本篇文章中,我们将通过分析两个APP的案例,探讨如何在设计、开发和运营过程中平衡这些因素。 案例一:微信 作为全球最大的移动社交应用,…

    其他 2023年3月28日
    00
  • java基础之pdf文件的合并

    Java基础之PDF文件的合并 在Java中,我们可以使用iText库来合并PDF文件。iText是一个开源的Java PDF库,可以用于创建、修改和处理PDF文件。本攻略将介如何使用iText库来合并PDF文件。 步骤1:导入iText库 首先,我们需要在Java项目中导入iText库。可以通过Maven或手动下载jar包的方式导入iText库。以下是使用…

    other 2023年5月9日
    00
  • nginx的return配置

    当然,我很乐意为您提供有关“nginx的return配置”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是nginx的return配置? nginx的return配置用于在服务器端返回HTTP响应。它可以用于重定向、返回状态码、设置响应头等操作。 以下是return配置的基本语法: return code [text]; 在这个示例中,我们使用retu…

    other 2023年5月6日
    00
  • 电脑cpu温度多少正常

    电脑CPU温度多少正常? CPU温度标准区间 电脑CPU的温度通常介于30°C至80°C之间,不同的CPU型号、CPU负载以及CPU散热配置等因素会影响CPU的运行温度。因此,我们需要了解不同的CPU型号所对应的标准温度范围,才能够知道自己的电脑CPU是否正常工作。 CPU温度监控工具 为了准确的监控电脑CPU的温度,我们需要借助一些CPU温度监控软件,例如…

    其他 2023年4月16日
    00
  • ES6新特性之数组、Math和扩展操作符用法示例

    ES6新特性之数组、Math和扩展操作符用法示例 数组的新特性 在ES6中,数组新增了许多方便的方法,可以大大减少代码量,提升开发效率。 数组中的includes方法 includes 方法用于判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false。 该方法的语法如下: array.includes(valueToFind[, fr…

    other 2023年6月25日
    00
  • IE11浏览器怎么安装 IE11 for Win7开发者预览版安装教程

    IE11 for Win7开发者预览版安装教程 简介 Internet Explorer 11是一个由微软开发的网络浏览器,是Windows 7、Windows 8.1、Windows 10和Windows Server 2012 R2的预设浏览器。如果您需要在Windows 7上安装IE11浏览器,可以按照以下步骤进行操作。 步骤 步骤1:下载安装包 首先…

    other 2023年6月26日
    00
  • 详解Spring 延迟初始化遇到的问题

    首先我们来详细讲解一下Spring延迟初始化相关的问题。 什么是Spring延迟初始化? Spring延迟初始化是指Spring在启动时并不会实例化所有的Bean,而是将Bean的初始化延迟到第一次使用该Bean时再进行创建和初始化。 为什么Spring要延迟初始化? Spring延迟初始化的目的在于优化系统的启动速度和效率。因为系统中有些Bean可能并不会…

    other 2023年6月20日
    00
  • MySql服务器系统变量和状态变量介绍

    MySql服务器系统变量和状态变量介绍 MySQL是一种流行的关系型数据库管理系统,它提供了许多系统变量和状态变量来控制和监视服务器的行为。系统变量是可以在服务器启动时设置的全局参数,而状态变量是反映服务器当前状态的信息。 系统变量 系统变量用于配置MySQL服务器的行为。以下是一些常见的系统变量: max_connections:该变量控制服务器允许的最大…

    other 2023年7月29日
    00
合作推广
合作推广
分享本页
返回顶部