关键字static和const的作用以及它们的区别
来源:互联网 发布:数据分析之淘宝大卖家 编辑:程序博客网 时间:2024/06/15 22:28
CPU型号:Intel(R) Core(TM) i5-2450M
系统:windows 10
IDE:Microsoft Visual C++ 6.0(下文中简称VC)
制图软件:Photoshop cs5
预备知识:
1.程序占用的内存分成五大部分:栈区,堆区,静态区(全局区),文字常量区,程序代码区
2.模块:一个.h加上对应的.c或者.cpp文件,可以理解成一个模块
static:
static的意思是静态。
1.用static修饰的变量存储在静态区(也叫全局区),且在内存中只初始化一次,默认值为0
2.声明在函数内的static变量,只能由在该函数的作用范围内使用
3.声明在模块内(.c文件中,函数体外)的static变量,可以在整个模块内使用,但不能在模块外使用
4.static修饰的函数,只能在定义它的模块内使用,不能在其他模块使用5.static修饰的类的数据成员被称为类的成员,为其所有对象所共享,也就是说静态数据成员只声明一次
6.静态成员变量必须要在类外初始化!因为它不属于特定的类对象,在没有产生类实例的时候也能用它。定义时要使用作用域标识符来定义,此时不能带static修饰符
7.静态成员变量不能使用this
-测试静态成员的默认值
#include <iostream>using namespace std;static int i;static float f;static char c;static short s;static double d;void main(void){cout<<"i = "<<i<<endl;cout<<"f = "<<f<<endl;cout<<"c = "<<c<<endl;cout<<"s = "<<s<<endl;cout<<"d = "<<d<<endl;}
打印结果:
其中char型的c为0,系统将他解释为\0,即字符串的结束标识符,因此为空。
#include <iostream>using namespace std;void fun(void){static int i = 4;i++;cout<<"i = "<<i<<endl;}void main(void){fun();fun();fun();}打印结果:
由此可见,函数内的static变量只初始化一次,后面执行static变量的初始化被视为无效操作。
--尝试下在函数体外进行打印:
#include <iostream>using namespace std;void fun(void){static int i = 4;i++;cout<<"i = "<<i<<endl;}void main(void){fun();fun();fun();cout<<i<<endl;}编译时提示:
error C2065: 'i' : undeclared identifier
由此说明static起了隐藏的作用
--测试静态成员变量的类外初始化,不用实例化也能使用:
myclass.h
#ifndef _MYCLASS_H#define _MYCLASS_Hclass A{public:static int a;};#endifmyclass.cpp
#include "myclass.h"int A::a=10;
main.cpp
#include <iostream>#include "mytools.h"#include "myclass.h"using namespace std;void main(void){cout<<A.a<<endl;}
CONST:
const的意思是只读。
1.const修饰的变量,具有不可改变性,此时可称其为常量。由于其不可改变性,修饰符const可保护数据,防止被意外更改,维护程序的健壮性。
2.const修饰形参时,表明它只是一个输入参数,在函数内部并不能更改只能读取
3.修饰类成员函数时,表示他是一个常函数,不能修改类的成员变量
4.代替预定义(#define),因为const可以进行类型检查,消除不必要的隐患
5.为类成员函数提供重载
--测试为类成员函数提供重载:
class A{void fun();void fun() const;};
STATIC和CONST的区别:
1.static修饰的变量可以被修改,而const修饰的变量不能被修改
2.static会限制变量的作用域,而const没有限制
3.static的存储域为静态区,const存储在常量区
4.static修饰的变量可以不用初始化(默认为0),const修饰的变量必须初始化
0 0
- 关键字static和const的作用以及它们的区别
- const和static的作用以及区别
- C++ static、const和static const 以及它们的初始化
- static、const和static const以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- C++ static、const和static const 以及它们的初始化
- JavaWeb 利用poi导出下拉框excel模版
- 字符串置换
- 自定义类加载器的编写原理
- 帧布局
- javaScript学习中。。。
- 关键字static和const的作用以及它们的区别
- poj 3026 Borg Maze
- Linux库函数之fgets
- Spring mvc+mybatis框架下的TooManyResultsException异常
- Android高效加载大图、多图解决方案,有效避免程序OOM
- java的static块执行时机
- CodeForces 633A-Ebony and Ivory
- 猜字母(字符串操作函数StringBuffer)
- 基于概率的矩阵分解原理详解(PMF)