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

原创 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#中有静态类的详细说明,且用法与普通类大不相同.


头文件中定义static静态变量的利弊

1. 问题产生#if 1typedef double Unit#elsestruct Unit{    double unit;    Unit(_unit)    {if (_unit       ...
  • caiqinghua0201
  • caiqinghua0201
  • 2010年12月14日 21:12
  • 9372

static在头文件中定义带来的危害

static的三种使用方式 (1)局部静态变量  (2)外部静态变量/函数  (3)静态数据成员/成员函数  引用static变量要小心! 因为static的局部性,全局静态变量...
  • qc20042
  • qc20042
  • 2011年09月30日 20:29
  • 6845

静态常量与非静态常量的区别

什么叫常量?一般来说就是不会变的量 静态与非静态: 静态:对于该类的对象来说,都只有一个,叫类变量 非静态:每个该类的对象都各有一个,叫成员变量. 因为是常量,不会变的,所有的对象都是一样...
  • JinJie_ing
  • JinJie_ing
  • 2015年01月15日 15:19
  • 2318

测试java中静态常量和静态变量的区别

以下是一个测试
  • huihuijor
  • huihuijor
  • 2014年08月28日 20:33
  • 5351

java中静态常量和静态变量的区别

以下是一个测试java中静态常量和静态变量区别的样例,表明两者加载时的区别。StaticVar类中定义了静态常量FIANL_VAR和静态变量VAR,静态代码块的打印语句表示类被加载...
  • qq853632587
  • qq853632587
  • 2017年10月10日 16:58
  • 431

Java中的静态变量,常量和方法

将变量,常量或是方法设置为静态的目的在于实现不同类在同一内存区域共享一个数据。假设我们定义了一个球类和一个圆类,在这两个类中都需要使用PI这个常量,如果分别在两个类中各定义一个PI常量,那系统会将这两...
  • Slow_Soul
  • Slow_Soul
  • 2015年10月20日 13:49
  • 1586

java静态变量、常量和方法

(1)提示:静态变量被类中的所有对象所共享,静态变量不能访问类中的实例成员。 (2)如果想让一个类的所有实例共享数据,就要使用静态变量(static variable),也成为类变量。静态变...
  • qq_28107395
  • qq_28107395
  • 2015年12月17日 21:54
  • 882

变量,常量,静态变量,静态常量

变量:String test = "abc"; //没什么好说的常量:java中利用关键字final定义常量  final String  test = "abc";         常量只能被赋值一...
  • gideal_wang
  • gideal_wang
  • 2009年11月20日 16:55
  • 7342

C++中静态成员函数的常量型问题

这几天看深入探索C++对象模型时,看到一句话:静态成员函数不可以是常量函数,如下代码: class Test { virtual ~Test(); public: static void Sta...
  • beyongwang
  • beyongwang
  • 2016年09月01日 21:47
  • 611

使用枚举代替常量,简化工作!

距离上一篇博客,不知不觉已经过去三个月了,不禁感叹时光如白驹过隙。这三个月,技术还是那样(囧),但换了份比较满意的工作,摸打滚爬一个月后,终于慢慢熟悉了新公司的业务,也终于可以抽点时间写写博客了,这事...
  • My_TrueLove
  • My_TrueLove
  • 2016年07月30日 19:21
  • 8335
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于头文件中常量和静态常量的用处
举报原因:
原因补充:

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