static的作用:

对变量:

1.局部变量:

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。

1)内存中的位置:静态存储区

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置(从原来的栈中存放改为静态存储区)及其生命周期(局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问),但未改变其作用域。

2.全局变量

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

注:static修饰全局变量,并未改变其存储位置及生命周期,而是改变了其作用域,使当前文件外的源文件无法访问该变量,好处如下:(1)不会被其他文件所访问,修改(2)其他文件中可以使用相同名字的变量,不会发生冲突。对全局函数也是有隐藏作用。而普通全局变量只要定义了,任何地方都能使用,使用前需要声明所有的.c文件,只能定义一次普通全局变量,但是可以声明多次(外部链接)。注意:全局变量的作用域是全局范围,但是在某个文件中使用时,必须先声明。

对类中的:

    1.成员变量

    用static修饰类的数据成员实际使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象。因此,static成员必须在类外进行初始化(初始化格式: int base::var=10;),而不能在构造函数内进行初始化,不过也可以用const修饰static数据成员在类内初始化 。

    特点:

  1. 不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。
  2. 静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。
  3. 静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的指针或引用。

2.成员函数

  1. 用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针。
  2. 静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。base::func(5,3);当static成员函数在类外定义时不需要加static修饰符。
  3. 在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。因为静态成员函数不含this指针。

不可以同时用const和static修饰成员函数。

C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。

我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

const的作用:

1.限定变量为不可修改。

2.限定成员函数不可以修改任何数据成员。

3.const与指针:

const char *p 表示 指向的内容不能改变。

char * const p,就是将P声明为常指针,它的地址不能改变,是固定的,但是它的内容可以改变。

转载于:https://www.cnblogs.com/jswu-ustc/p/8565466.html

static 和 const 关键字的用法总结相关推荐

  1. 理解PHP5中static和const关键字

    PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) s ...

  2. c语言中{的作用,C语言中Static和Const关键字的作用

    C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...

  3. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  4. C语言之头文件,static与const关键字

    [前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔 ...

  5. C/C++ static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

  6. C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 2 ...

  7. C语言中Static和Const关键字的的作用

    static作用:"改变生命周期" 或者 "改变作用域" 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用 ...

  8. C语言中const关键字的用法

    转载请注明出处http://blog.csdn.net/xingjiarong/article/details/47282255 关键字const用来定义常量,如果一个变量被const修饰,那么它的值 ...

  9. c++中extern,static,const关键字的作用

    0.extern 意思是外部的,什么是外部呢,相对的是内部,在内部之外的,我们称为外部,这里只的模块或者文件外部 这是一个修饰符,可以用来修饰哪些东西呢,能修饰的东西无非变量和函数两个,函数又分为外部 ...

最新文章

  1. python读取文件最后一行
  2. Navicat for MySQL - 破解
  3. 初学者必看的文章:在VM12中安装 RedHat RHEL7.2  系统的详细步骤:看我如何操纵RHEL系统...
  4. 上拉加载更多后台数据_微信小程序端操作云数据库
  5. 华为智能家居app未能连接上远程云服务_【InForSec通讯】智能家居云平台实体间交互状态安全分析 | Usenix2019...
  6. Netty使用kryo序列化传输对象
  7. PHP try catch 捕获异常,最后调用的方法中错误不打印
  8. QI精小无线充电接收模块(带线圈)可以输出5V,4.2V,QI协议,22MM圆形,500MA电流拿了即可使用
  9. android字典的搜索功能,Android上两个不错的阅读取词字典推荐:GoldenDict Mobile和Fora Dictionary...
  10. Java_API文档
  11. review board 使用
  12. BUUCTF刷题记录
  13. linux firefox插件目录,Linux中Firefox常用插件说明
  14. xingtai - 时间
  15. 计算机c盘加容量,增加C盘空间,详细教您怎么增加C盘空间
  16. latex—中文目录乱码
  17. WiFi密码忘记?电脑密码忘记?
  18. mock详细教程入门这一篇就够了(*)
  19. Gazebo仿真平台模型搭建与修改
  20. php word目录,word怎么做目录和页码

热门文章

  1. 键盘按键的键码值(全)
  2. 很无聊但是又很重要的 计算机网络基础知识 --- “HTTP 核心概念(二) ” 【面试必问】
  3. funcode环境配置(亲测有效)
  4. 最长递增子序列的长度(编程之美)
  5. XRImmersal×PLATEAUで巨大AR
  6. 简单对接第三方物流接口TestDemo
  7. 大V 对 2022 年及以后的 DeFi 预测
  8. 65条网页制作常用技巧整理
  9. ccot 目标跟踪全称_目标跟踪--CamShift
  10. 【放大电路频率响应】单管共射放大电路的频率响应