c/c++ static用法

原创 2018年04月17日 20:53:34

c/c++中static用法

c中static用法

回想一下,c中static用法:
1.局部变量和static局部变量
作用域:相同,都是所定义的函数;
生存周期:不同,分别是所定义的函数执行结束,程序运行结束;
存储空间:不同,分别是栈和静态存储区;
2.全局变量和static全局变量
作用域:不同,分别是所有文件的函数使用和所定义的源文件中函数调用;
定义static全局变量:避免其他文件中同名变量冲突,起到隐藏作用;
生存周期:相同,程序运行结束;
存储空间:相同,静态存储区;
3.普通函数和static函数
作用域:不同,分别是全局可访问,static函数限制只能是所定义的源文件中函数调用;
c/c++存储区有4种或5种说法:
(1)堆区、栈区、静态存储区、常量存储区
(2)堆区、栈区、自由存储区、静态存储区、常量存储区;

c++中static用法

首先,为什么要引入static?
为什么要引入static数据成员?
当一个数据成员属于整个类而不是一个对象,又不能破坏类的封装,即要求在类的内部,对外不可见。所以,引入static数据成员。例如,C++ Primer关于静态成员例子,一个银行账户类需要一个数据成员来表示当前的利率。在这个类中,我们希望的是利率与类相关联,而不是与类的每个对象相关联。

再来谈为什么引入static成员函数?
C++中调用类的成员函数,会传递this指针,将类的实例化对象的首地址传递给成员函数,根据对象首地址计算其成员变量,然后进行操作。然而,static变量不在对象的内存空间中,因而没有必要用到this指针,所以需要独立于对象之外的对static变量访问的方式。早期是((ClassName *)0)->func(),这样避免了对象的实例化操作,后来干脆引入static成员函数。

用法: static数据成员必须在类外初始化。

class Test
{
public:
  ....
  static void show()
  { cout << count <<endl; }
private:
  ...
  static int count;    //这里只声明,没有分配内存,没有初始化。           
}

int Test::count = 0; // 必须类外初始化静态变量


int main()
{
   Test a(4);
   a.show();  //也可以a.show();
}

参考

[1] https://blog.csdn.net/artechtor/article/details/2312766

版权声明:欢迎转载,请注明出处。 https://blog.csdn.net/zxc995293774/article/details/79980632

c/c++ static 用法总结(三版本合一)

最近经历了一些笔试和面试,经常会被问到static关键字的作用,感觉虽然知道一些,但 每次回答的都不够满意,今天在网上查了一下,总结总结,恩,以备后用! 综述 sta...
  • mznewfacer
  • mznewfacer
  • 2011-10-23 13:32:22
  • 3935

c++中static的用法详解

C 语言的 static 关键字有三种(具体来说是两种)用途: 1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。 int foo(){ static int i = 1; ...
  • majianfei1023
  • majianfei1023
  • 2015-04-26 19:57:49
  • 13580

C语言与C++中static,extern的用法及区别总结

在C语言中:隐藏  很多人经常会忘了这一条。其实这个作用很常用也很重要。   当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。   为理解这句话,我举例来说明。...
  • lixungogogo
  • lixungogogo
  • 2016-08-10 22:31:21
  • 1194

static const extern在C与C++中的区别

C中const的用法: 1, 在定义变量时使用(由于const常量在定义后不能被修改,所以在定义时一定要进行初始化操作): a)  最简单的用法,说明变量为一个常变量(在以下例子里,int 和co...
  • CC285494320
  • CC285494320
  • 2016-06-02 18:40:39
  • 553

C++ static 用法总结

  • 2011年08月23日 21:22
  • 38KB
  • 下载

static关键字的四种用法

static的各种用法 static共有四种用法,分别是:静态变量、静态方法、静态代码块、导入静态。 //此处就是静态导入(Math类) import static java.lang.Math...
  • Jimy___Fight
  • Jimy___Fight
  • 2016-03-30 13:05:53
  • 313

static用法小结

  • 2010年02月23日 22:15
  • 40KB
  • 下载

C/C++中inline/static inline/extern inline的区别及使用

C/C++中inline/static inline/extern inline的区别及使用
  • fengbingchun
  • fengbingchun
  • 2016-04-24 16:39:43
  • 10562

C/C++——auto,static,register,extern用法

本文总结了auto,register,static和extern的用法,结合变量生存周期和作用域概念对static和extern做了说明,主要对static和变量、函数和类做了详细总结。帮助读者在C/...
  • u010757264
  • u010757264
  • 2015-11-19 19:49:12
  • 1446

简述static关键字在c/c++中的作用

在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。 2) 在模块内(但在函数体外),一个被声明为...
  • qq_36631758
  • qq_36631758
  • 2017-07-27 12:51:40
  • 2116
收藏助手
不良信息举报
您举报文章:c/c++ static用法
举报原因:
原因补充:

(最多只允许输入30个字)