当前位置:首页 > 健康 >

static 关键字的作用(static的三种作用)

来源:原点资讯(www.yd166.com)时间:2022-11-25 14:00:58作者:YD166手机阅读>>

static,即静态声明。它在 作用域、存储方式、生命周期 等各方面影响一个变量或函数。文章将从 局部变量、全局变量、普通函数、类的static成员(包括数据成员与成员函数)来总结static。


static 关键字的作用,static的三种作用(1)


  • 全局变量

   所有的全局变量,无论是否是static的,都是存储于静态存储区的。全局变量本身就是静态存储方式,将全局变量声明为static是为了将变量的作用域限制在本翻译单元中(本源文件中),使该全局变量不能被源程序的其他翻译单元所引用。普通全局变量使用extren声明可以拓展其作用域至其他翻译单元中。

   可以总结为:static改变了全局变量的作用域,而不改变变量的存储位置与生命周期。  

  • 局部变量

   局部变量即在函数内定义的或在块中定义的变量。static对局部变量的作用不同于全局变量。普通局部变量在离开其作用域(如离开定义它的函数或块的花括号)时即消失,而static变量却存在于程序运行的整个过程,也即是说,static声明改变了局部变量的生命周期。普通局部变量是存储在动态存储区的(堆),而static局部变量是存储在静态存储区,因而普通局部变量在函数每次被调用时都被重新分配内存地址,而静态局部变量则在程序运行过程中占据固定的内存。

   可以总结为:static改变了局部变量的存储方式与生命周期,而不改变变量的作用域。

  • 普通函数

   这里的普通函数是为了与类的成员函数区别开来。函数在定义时默认是外部的,通过extren声明即可被其他源文件引用,static声明将函数的作用域限制在本翻译单元中,成为内部函数。static函数在内存中只有一份,普通函数在每个调用中维持一份拷贝。

  可以总结为:static使得函数在内存中只有一份,并将函数作用域限制在当前源文件。

另外,static有几个优点总被提起:

    1. 避免了链接时与其他源文件中的变量命名引起冲突。

    2.对于c函数而言,static对函数进行了信息屏蔽,只给当前文件中其他函数使用。

  • 类static成员

  static声明对类成员的作用可以这样概括:static使得成员从“属于类对象”变成了“属于类,而不属于类对象”。

  对于数据成员:

    1.static数据成员必须在类定义体的外部进行定义。

class BOOK { private: //折扣 static float discount; }; //在类定义体外部定义并初始化 float BOOK::discount = 0.95f;


2.不像普通数据成员,static数据成员不能在构造函数中进行初始化。正如上面所说,它只能在类外部定义并初始化。然而有一个例外,整型的const static 数据成员可以在类的定义体中进行初始化。但需注意的是,const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义(不必再指定初始值了)。


class BOOK { private: //折扣 const static int discount=1; }; const int BOOK::discount;

  • 类static成员函数

  在类内部声明的static成员函数,在类定义体外部进行定义时无须重复指定static关键字。

  对于static成员函数,它同样是不属于类对象的,因而它没有this指针。它可以直接访问类的static数据成员,不能直接使用非static成员,原因是非static数据成员属于类对象,使用非static数据成员时必须通过this指针来确定是这些成员属于哪个类对象,然而上面说了,static成员函数没有this指针。

  static成员函数不能被声明为const。实际上,成员函数被声明为const的本质是它向编译器保证不会通过这个函数来修改类对象在内存中的每一个bit的内容(可以看《effective C 》 条款03 “尽可能使用const” ),然而我们知道,static成员函数并不属于类对象,更谈不上要保证不修改某一对象的内存了。

  另外,虚函数不能为声明为static,为什么呢?原因还是static成员函数没有this指针。virtual funtion运行时绑定是多态的基础,没有this指针多态的概念无法践行。

PS:如果文章内容有错误,恳请指出,万分感谢。

,

栏目热文

c语言static使用举例(c语言必背100程序)

c语言static使用举例(c语言必背100程序)

这篇介绍C语言里函数的定义、子函数的使用。接着介绍变量的作用域,定义全局变量、静态变量、只读变量、变量初始化等等。一、函...

2022-11-25 14:29:37查看全文 >>

static在c语言中的用法(c语言顺口溜)

static在c语言中的用法(c语言顺口溜)

一、位操作运算符 含义 运算符 含义& 按位与 ~ 取反| 按位或 << 左移^ 按位异或 >>...

2022-11-25 14:01:09查看全文 >>

static声明的优缺点(static的底层原理)

static声明的优缺点(static的底层原理)

文章目录面向对象的进阶面向对象进阶的第一篇, 主要讲解内容如下:static关键字 : 开发中如何定义一个共享的信息,给...

2022-11-25 14:24:41查看全文 >>

static方法的作用(static怎么使用)

static方法的作用(static怎么使用)

一、聊一聊Static与JVMJAVA 把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用...

2022-11-25 14:18:45查看全文 >>

c语言static用法(c 语言static)

c语言static用法(c 语言static)

static静态变量C语言提供了static关键字来修饰变量的定义,static关键字修饰的变量称为:静态变量;该关键字...

2022-11-25 14:07:06查看全文 >>

c语言static的作用(c语言static关键字的作用)

c语言static的作用(c语言static关键字的作用)

C语言是一门面向结构化的高级编程语言(也有人认为它是中级语言),用于通用编程需求。基本上,C语言是其基本语法和库函数的集...

2022-11-25 13:59:49查看全文 >>

c语言static(c语言static的作用举例)

c语言static(c语言static的作用举例)

接上文:C语言 static 关键字的常见用法有三种:用于局部变量的修饰符;用于全局变量的修饰符;用于函数的修饰符。1、...

2022-11-25 14:24:49查看全文 >>

static是关键字还是标识符(static 作用域)

static是关键字还是标识符(static 作用域)

static - 分包今日目标:1 能够理解什么是分类分包2 能够掌握static关键字的使用3 能够使用分包写出学生管...

2022-11-25 14:09:06查看全文 >>

c语言中static三种用法(c语言面试基础知识)

c语言中static三种用法(c语言面试基础知识)

C 的static关键字可修饰类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类的。仔细琢磨静态成员变量,会...

2022-11-25 14:26:55查看全文 >>

static的意义(static作用)

static的意义(static作用)

特点特点:一种路由的方式,路由项(routing entry)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的...

2022-11-25 14:33:05查看全文 >>

文档排行