头文件中定义const变量的疑问

zxl1989 2013-11-11 05:29:04
引用
常量表达式是编译器在编译时就能够计算出结果的整型表达式。


引用
如果 const 变量不是用常量表达式初始化,那么它就不应该在头文件中定义。相反,和其他的变量一样,该 const 变量应该在一个源文件中定义并初始化。应在头文件中为它添加 extern 声明,以使其能被多个文件共享。


疑问:
1. 只有整型的常亮表达式才可以定义const变量在头文件中吗?

//head.h
const double const_val = 9.5;



//main.cpp
#include <iostream>
using namespace std;

#include "head.h"

int main()
{
cout << const_val << endl;
return 0;
}


编译通过并成功执行输出9.5。

不是很理解这边的说法。

2. A)将const变量定义在头文件中,源文件包含该头文件对const变量进行访问;
B)将const变量定义在源文件中,其他源文件利用extern声明对const变量进行访问;
A)和B)有何区别了?
书上说用常量表达式初始化的const变量可以放在头文件中定义,即用A),其他的情况则选择B),但上面发现double初始化的const变量也可以用A),求解释?
另外A)实际上是不为const变量分配存储空间的,而B)则为const变量分配空间,是这样吗?

谢谢!
...全文
225 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-11-13
  • 打赏
  • 举报
回复
《编译原理》
To_be_sky 2013-11-12
  • 打赏
  • 举报
回复
声明是不分配空间额,定义要分配空间。
「已注销」 2013-11-12
  • 打赏
  • 举报
回复
const 提高可读性,然后就是在函数参数中, 例如void fun(const int para),让传进去的参数在函数体中不能修改,提高了安全性呀
ri_aje 2013-11-11
  • 打赏
  • 举报
回复
c++11 对常量表达式的定义放宽了,看点新书吧。
max_min_ 2013-11-11
  • 打赏
  • 举报
回复
好好理解 定义和申明的区别就好了!
漫步者、 2013-11-11
  • 打赏
  • 举报
回复
定义在头文件中,每次include它的时候,该文件在你include有一份拷贝! 而在cpp文件中,你在外部extern,你整个工程只有一份数据!
heavirain 2013-11-11
  • 打赏
  • 举报
回复
A和B都为const变量分配空间的,A和B编译后结果是一样的。我的理解是谁的可读性更高用谁。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧