21xrx.com
2024-09-20 00:24:12 Friday
登录
文章检索 我的文章 写文章
C++中static关键字的用法
2023-07-03 07:10:13 深夜i     --     --
C++ static 用法 静态成员变量

在C++编程中,static关键字是一个非常重要的用法。它有多种不同的含义和用途,能够帮助程序员更有效地管理内存和变量。下面我们将介绍一些static关键字的用法。

1. 静态局部变量

在函数中定义的变量有时需要在函数执行完后仍然保留其值,这时候就可以使用静态局部变量。静态局部变量生命周期与程序相同,不同于普通的局部变量在函数结束后就会自动销毁,静态局部变量也只被初始化一次,它的值在下一次函数被调用时保持不变。

示例:


void func() {

  static int num = 0;

  num++;

  std::cout << "num = " << num << std::endl;

}

int main() {

  func(); // num = 1

  func(); // num = 2

  func(); // num = 3

  return 0;

}

2. 静态全局变量

静态全局变量与普通的全局变量不同,静态全局变量只能在定义它的文件中访问,其他文件无法访问。静态全局变量的作用域仅限于定义它的源文件。通过这种方式,程序员可以避免变量在不同的文件中重复定义。

示例:

在source1.cpp文件中定义静态全局变量:


static int num = 10;

同样,在source2.cpp文件中也定义静态全局变量:


static int num = 20;

其中num = 20是无效的,因为该变量只能在定义它的文件中访问。

3. 静态函数

和静态变量一样,静态函数仅在定义它的源文件中可见。定义静态函数的主要原因是为了将函数隐藏起来,避免其他源文件误用。如果没有使用static关键字来定义函数,则该函数在整个程序中都可见,如果其他源文件也定义了同名函数,则编译时会出现错误。

示例:


static void func()

  std::cout << "This is a static function" << std::endl;

int main() {

  func(); // 编译错误,因为func函数只在定义它的源文件中可见

  return 0;

}

4. 静态成员变量

和静态函数一样,静态成员变量属于整个类而不是类的某个对象。静态成员变量可以在任何一个对象被创建前被初始化,并且一直存在于程序的整个生命期。通过静态成员变量,同一个类的所有对象之间可以共享变量。

示例:


class MyClass

public:

  static int num;

;

int MyClass::num = 0;

int main()

  MyClass obj1;

  MyClass obj2;

  obj1.num = 10;

  obj2.num = 20;

  std::cout << "obj1.num = " << obj1.num << std::endl; // obj1.num = 20

  std::cout << "obj2.num = " << obj2.num << std::endl; // obj2.num = 20

  return 0;

在上述示例中,num作为MyClass类的静态成员变量,可以被MyClass类的所有对象共享。在main函数中,我们首先将obj1.num赋值为10,然后又将obj2.num赋值为20,最终输出的结果是obj1.num=20,obj2.num=20,因为它们共享了同一个变量num。

综上所述,static关键字在C++编程中有非常重要的作用,可以让程序员更有效地管理内存和变量,提高程序的可靠性、可用性和可扩展性。我们需要通过不断的练习和实践,充分掌握和运用static关键字。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复