C++静态变量的使用方法?C++静态变量占用内存情况?拷贝构造函数会拷贝哪些内容?const使用注意

发布于:2025-02-10 ⋅ 阅读:(54) ⋅ 点赞:(0)

1.静态变量的使用

  • 函数中使用:静态变量初次声明并定义作为初始值,后续再次运行函数,基于上次的结果累加
  • 类中:类内声明,类外实现(如声明为const,特殊情况,可以类内直接声明时定义)
#include <iostream>
using namespace std;

class Box
{
public:
    static int s_i;
};

int Box::s_i = 10;

void TT()
{
    static int jj = 1;
    cout << jj << endl;
    jj++;
}

int main() {
    Box b;
    cout << b.s_i << endl;
    TT();
    TT();
    TT();
    return 0;
}
  • 输出
10
1
2
3

2.C++静态变量占用内存情况:不占类内存

#include <iostream>
using namespace std;

class Base
{
public:
   virtual ~Base(){}

   constexpr  static double s_idd = 0.0;
   constexpr  static double s_idd1 = 0.0;
};

class Box :public Base
{
public:
    constexpr  static double s_i = 0.0;
    double dd = 0;
    double dd1 = 0;
};

class Box1 :public Base
{
public:
    constexpr  static double s_i = 0.0;
    constexpr  static double s_i2 = 0.0;
    constexpr  static double s_i3 = 0.0;
};

int main() {
    Base* factory1 = new Box();
    Base* factory2 = new Box1();
    cout << sizeof(factory1) << endl;
    cout << sizeof(Box) << endl;
    cout << sizeof(Box1) << endl;
    delete factory1;
    delete factory2;
    return 0;
}
  • 输出
8//普通指针大小
24//类内内存总计:8+8+8
8//一个virtual虚表指针大小

3.C++拷贝构造函数会拷贝哪些内容?

非static普通成员变量

4.使用const

#include <iostream>
using namespace std;

class Box
{
public:
    Box():c_i(0){}
public:
    const static int s_i = 0;
    const int c_i = 1;
};

int main() {
    Box b;
    cout << b.s_i << endl;
    cout << b.c_i << endl;
    return 0;
}
  • 输出
0
0
  • 注意:初始化列表和const int声明时定义,最终显示为初始化列表

  • 注意:

  • 类内声明const必须初始化