关于头文件中常量和静态常量的用处

原创 2013年12月05日 11:46:02

常量,即不能改变的量。

静态,即内存中只存在一个。

C++ Primer中提到在全局作用域中定义的const变量默认为文件的局部变量,像

//file_1.cc
const int DDD = 1;
//file_2.cc
extern const int DDD;
这样的用法是错误的。

会出现

这样的错误。

而在全局作用域中定义的非const变量在整个程序中都可以使用。

//file_1.cc
int AAA = 1;
//file_2.cc
extern int AAA;
这样的用法就是正确的。

const对象是文件的局部变量说的是const放在.cc文件中,如果将const对象定义在头文件中,则在引用了该头文件的源文件则可以使用该const对象。就像在源文件中定义了const对象一样。

另外在头文件像避免重复定义,可以使用下面措施:

#ifndef M_AAA
#define M_AAA
const int AAA = 1;
#endif

那三行以#开头的一句都不能少。


C++中关于const变量和static const变量的区别,百度知道有这么一段解释:

对于C/C++语言来讲,
const就是只读的意思,只在声明中使用;
static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;
对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.
static const 应该就是上面两者的合集.
下面分别说明:
全局:
const,只读的全局变量,其值不可修改.
static,规定此全局变量只在当前模块(文件)中可见.
static const,既是只读的,又是只在当前模块中可见的.
文件:
文件指针可当作一个变量来看,与上面所说类似.
函数:
const,返回只读变量的函数.
static,规定此函数只在当前模块可见.
类:
const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用)
static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同.


C++中一般变量、引用变量、常量、 静态变量、静态常量的初始化问题

#include using namespace std; class CMyclass { public: CMyclass():x(0),y(x),m(9),tempString(""),v...
  • IT_ZB
  • IT_ZB
  • 2016年06月13日 16:44
  • 196

关于内部类为什么可以有静态常量,不能有静态变量的原因?

大部分都是拷贝的别人的! java类加载顺序,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代码中的变量int a 初始化,那么必须先执行加载外部类,再加载内部类,最后...

iOS定义静态变量、静态常量、全局变量

静态变量 当我们希望一个变量的作用域不仅仅是作用域某个类的某个对象,而是作用域整个类的时候,这时候就可以使用静态变量。 static static修饰的变量,是一个私有的全局变量。 C或者Ja...

Java静态变量、静态常量、静态方法

Java静态变量、静态常量、静态方法        静态变量和静态方法都属于静态对象。在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方...

音乐播放器,注意静态常量的使用命名要有明确具体的含义(查看API,若想获得音乐本身自带的歌手名以及图片等信息,可查看MediaMetadataRetrieve来获得详细信息)

另外注意Log的使用 注意权限的添加 音乐播放器带有缓存功能 主程序 音乐部分程序 MusicService服务程序 song程序里面含有未开发部分 SongAdapter适配器程序 布局文件 主布局...

Java基础(五)---局部变量、全局变量、静态变量、final变量、静态常量、静态方法

实例驱动的学习方法,先看下面的例子: public class Programmer { /** * 全局变量:也叫成员变量,是指在类中定义的变量; * 它在整个类中都有效。全局变量分为:类...

(8.13)客户端、服务器交互用json,同时去数据库检查,将0、1设置为静态常量(便于加注释它是干什么的,另外多建类,单例模式的使用)

服务器端程序在java Resouce的src下的服务器主程序,同时需要把包都导入到WEB-INF下的lib下,需要导入json的包和数据库驱动的包//在java Resouce的src下的服务器主程...

error C2864:只有静态常量整型数据成员才可以在类中初始化

用visual Studio 2010不支持非静态常量整型数据成员在类内初始化,报错 error C2864:只有静态常量整型数据成员才可以在类中初始化 原因:     VS2010支持C++11之前...
  • CXHPLY
  • CXHPLY
  • 2015年11月02日 11:21
  • 4740

C++类内静态常量定义和声明及enum hack

此篇文章介绍类内静态常量定义和声明的用法,在编程时经常遇到需要定义一个常量,而且如果要确保其的有效性在某个范围内,则需要将其定义在一个class内。而其用法常会遇到一些问题,下面简要说明其中会遇到的一...

静态常量(static final)的研究

静态常量由于其编译原理的特殊性有时候比较难理解,下面就分情况举例,相信4个示例能帮大家很好地理解static 和 final关键字的使用。 编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于头文件中常量和静态常量的用处
举报原因:
原因补充:

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