首页 > 编程语言 >C++中static和const的区别和用法

C++中static和const的区别和用法

时间:2025-01-23 16:56:21浏览次数:3  
标签:const 常量 int C++ 静态 static cpp

在C++中,staticconst是两个关键字,它们各自有不同的用途和语法。下面是它们的主要区别和用法:

const关键字

const关键字用于声明一个常量,即该变量的值在初始化后不能被修改。

用法:
  1. 局部变量

    void func() {
        const int a = 10; // a 是一个常量,值为10,不能在函数内部修改
        // a = 20; // 错误:不能给常量赋值
    }
    
  2. 全局变量

    const int g_a = 10; // g_a 是一个全局常量
    
  3. 指针

    • 指向常量的指针:

      const int *p = &a; // p 可以指向 int 类型变量,但不能通过 p 修改变量的值
      // *p = 20; // 错误:不能通过 p 修改值
      
    • 常量指针:

      int a = 10;
      int *const p = &a; // p 是一个常量指针,指向 a,p 的值(即存储的地址)不能改变
      // p = &b; // 错误:不能改变 p 的值
      
    • 指向常量的常量指针:

      const int *const p = &a; // p 指向一个常量 int,且 p 本身也是常量指针
      // *p = 20; // 错误:不能通过 p 修改值
      // p = &b; // 错误:不能改变 p 的值
      
  4. 类成员

    class MyClass {
    public:
        const int value; // 常量成员变量,必须在构造函数的初始化列表中初始化
        MyClass(int v) : value(v) {}
    };
    

static关键字

static关键字用于声明静态变量或函数,具有不同的作用范围和行为,取决于它的使用上下文。

用法:
  1. 局部变量

    • 静态局部变量在函数内部声明,但其生命周期贯穿整个程序运行期。它只在第一次进入该函数时被初始化一次。
      void func() {
          static int count = 0; // count 是一个静态局部变量,只在第一次调用 func 时初始化为 0
          count++;
          std::cout << count << std::endl;
      }
      
  2. 全局变量

    • 静态全局变量仅在声明它的文件内部可见,具有内部链接(internal linkage)。
      // file1.cpp
      static int globalVar = 10; // 仅在 file1.cpp 中可见
      
      // file2.cpp
      // extern int globalVar; // 错误:无法访问 file1.cpp 中的 static 全局变量
      
  3. 函数

    • 静态函数仅在声明它的文件内部可见。
      // file1.cpp
      static void myFunction() {
          // 函数体
      }
      
      // file2.cpp
      // void myFunction(); // 错误:无法访问 file1.cpp 中的 static 函数
      
  4. 类成员

    • 静态类成员属于类本身,而不是某个对象实例。它们必须在类外部定义和初始化。
      class MyClass {
      public:
          static int staticVar; // 静态成员变量
          static void staticFunc() { // 静态成员函数
              // 函数体
          }
      };
      
      int MyClass::staticVar = 10; // 静态成员变量的定义和初始化
      

总结

  • const用于声明常量,表示该变量的值不能被修改。
  • static用于声明静态变量或函数,具有延长生命周期或限制可见性的作用。

标签:const,常量,int,C++,静态,static,cpp
From: https://blog.csdn.net/qq_39417283/article/details/145326323

相关文章

  • 第一讲C++
    第一题LongLoongForapositiveintegerX,theDragonStringoflevelXisastringoflength(X+3)formedbyoneL,Xoccurrencesofo,onen,andonegarrangedinthisorder.YouaregivenapositiveintegerN.PrinttheDragonStringoflevelN.Noteth......
  • c++迷宫问题(migong)
    今天的题目叫“迷宫问题(migong)”,是“DFS深度优先搜索递归”一类的。题目描述设有一个N*N(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能,入口和出口处肯定是0。迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数......
  • c++瓷砖
    今天的题目叫“瓷砖”,是“DFS深度优先搜索递归”一类的。题目描述在一个w×h的矩形广场上,每一块1x1的地面都铺设了红色或黑色的瓷砖。小谢同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻的且是黑色的瓷砖上。现在他想知道,通过重复上述移动所能......
  • 【基础】愤怒的奶牛 USACO c++
    描述FarmerJohn建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,…,xN(0<=xi<=1,000,000,000)。他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,FarmerJohn想把这些牛安置在指定的隔间,所......
  • 打卡信奥刷题(651)用C++信奥P8396[普及组/提高] [CCC2022 S2] Good Groups
    [CCC2022S2]GoodGroups题目背景请注意:这道题是CCO2022J4GoodGroups的加强版。管理备注:似乎没有加强。题目描述一个班级会被分成ggg个组,每个组有三个人,这......
  • 详解类与对象——c++对象模型和this指针
    (^_^)一.成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上classPerson{public:Person(){mA=0;}//非静态成员变量占对象空间intmA;//静态成员变量不占对象空间staticintmB;//函数也不占对......
  • c++ 智能指针
    1. unique_ptr:这种智能指针是用于独占一份内存资源,一个资源也就只允许被一个unique_ptr占用。离开作用域后自动删除,无需显式调用delete。并且不能复制,只能转移。原理实现:template<typenameT>classunique_ptr{private:T*ptr;public:explicitunique_ptr(T*p......
  • GESP2024年6月认证C++六级( 第三部分编程题(1)计算得分)
    参考程序:#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[30];strings;intdp[N];intmain(){ intn; cin>>n; for(inti=1;i<=n;i++) { cin>>a[i]; } intm; cin>>m; cin>>s; for(inti=1;i<=......
  • 最新毕设-Django-新能源汽车推荐系统-30063(免费领项目)可做计算机毕业设计JAVA、PHP、
    摘要本论文主要论述了如何基于Django框架开发一个新能源汽车推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,爬取懂车帝的汽车信息,面向对象编程思想进行项目开发。在引言中,作者将论述新能源汽车推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,......
  • 《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
    摘要C++的operator关键字和操作符重载是语言的核心特性之一,使开发者能够扩展内置操作符以适应自定义类型,从而实现更高效、直观的代码表达。本文全面解析了operator关键字的基本概念、支持重载的操作符范围及其使用场景,详细介绍了操作符重载的语法、实现细节和底层机制......