const、static、extern小结
来源:互联网 发布:3维设计软件 编辑:程序博客网 时间:2024/06/11 01:22
const
1.const修饰的只读变量
编译时,编译器提示错误,int b[a]这行:expected constant expression命名为.cpp文件,则没问题。原因是:在c中,常量表达式必须是编译期常量,a不是编译期常量(是运行期常量)。因为const int a在c中不是常量表达式,因此不能用于定义数组。
2.节省空间,避免不必要的内存分配
#define M 3 // 宏常量
const int N=5; // 此时N并未放入内存中
...
int i=N; // 此时为N分配内存,以后不再分配
int i=M; // 预编译期间进行宏替换,分配内存
int j=N; // 没有内存分配
int j=M; // 再进行宏替换,又一次分配内存
const定义的只读变量在程序运行过程中只有一份拷贝(因为他是全局的只读变量,存放在静态区),而#define定义的宏变量在内存中。有若干个拷贝
3.修饰指针
4.
a)
void func(const int a);
c)
const int func();
b)
C++中区别于C的const用法
1. const类成员
量有所不同。const类成员是对应于每个对象而言,它在对象构造期间被初始化,在这个对象的生存周不允变。
2. const
const
functionType 数体后:
static主要有三个作用:
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数 //c++特有一、局部静态变量
2. static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次。
3. 对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符。(对于C++中的class对象例外,class的对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型)
二、外部静态变量/函数
对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区,生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部。
三、静态数据成员/成员函数
C+ +重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别,
也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成多少个类的实例,
就可以用到静态数据成员. 在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性. 这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义. 因为它是对整个类来说是唯一的,因此不可能属于某一个实例对象的. (针对静态数据成员而言, 成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针. )
对变量而言,变量的声明有两种情况: 一种是需要建立存储空间的,不用加extern;2、另一种是不需要建立存储空间,需要加extern 。如果你想在本源文件中使用另一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;
对函数而言,如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该变量,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。
- const、static、extern小结
- 全局变量|extern |static|const 用法小结
- const、static、extern 在头文件中似的情况小结
- static const extern
- const,static,extern,volatile
- const static 和 extern
- extern、const、static笔记
- const,static,extern
- static const extern
- extern、static、const区别
- Extern Static const
- static ,extern,const
- const extern static
- const, static, extern, typedef
- static extern const
- const,static,extern详解
- 浅谈const,static,extern
- const,static,extern简介
- JDK和JRE以及环境变量的设置
- Eclipse安装反编译插件
- 我国历史上各个朝代的都城
- zigbee协议栈应用(二)基础协议栈入门
- layui-layer弹出层使用
- const、static、extern小结
- C#如何监听全局的事件-例如鼠标移动事件
- Android Studio Error inflating android.support.v7.widget.Toolbar
- 慎用Array.asList()
- 华为机试---输入n个整数,输出其中最小的k个
- Makefile 中的 $@, $^, $< , $? 符号
- Android开源项目及库
- TimSort in Java 7
- jenkins+windows7 环境搭建