关于常量的一个问题

饶鹏 2007-11-10 03:03:38
我想让一个常量作用于全局范围,在程序运行一段时间后再对其赋初值(因为此时才能得到它的初值)。
但const对象必须在定义时初始化。我应该怎么做?

...全文
366 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucebushangya 2008-03-05
  • 打赏
  • 举报
回复
看来还可以,我现在真的很缺积分呀,不好意思了!
zhucebushangya 2008-03-05
  • 打赏
  • 举报
回复
节贴了还能继续发表吗,我想知道这个问题?
lihao1111111111 2007-11-12
  • 打赏
  • 举报
回复
loops比较牛!
lauxp 2007-11-11
  • 打赏
  • 举报
回复
这么用?不大好吧
zhuwuwei 2007-11-11
  • 打赏
  • 举报
回复
费力不讨好。
scq2099yt 2007-11-11
  • 打赏
  • 举报
回复
不明白为什么要这么定义常量
zhucebushangya 2007-11-10
  • 打赏
  • 举报
回复
再写一个变量吧
饶鹏 2007-11-10
  • 打赏
  • 举报
回复
原来还有挽救的方法啊,那篇讲解LNK2001链接错误的文章看来要改改了。
loops 2007-11-10
  • 打赏
  • 举报
回复
刚才忘了常量默认是内部链接的,所以加extern,在其他cpp中就能使用pA了,我已经测试通过了。

static int A;
extern int const * const pA=&A;
void InitGlobalA(int val)
{
A=val;
}


loops 2007-11-10
  • 打赏
  • 举报
回复
加个extern,常量默认是static 内部链接的。
extern int const * const pA=&A;
饶鹏 2007-11-10
  • 打赏
  • 举报
回复
  C++的全局常量只有静态连接性能。这不同于C,如果试图在C++的
多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在
头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种
方法是使用时给该变量赋以常数。

忘了测试pA了,结果是无法在其他文件中使用……
饶鹏 2007-11-10
  • 打赏
  • 举报
回复
刚才试了,loops 的方法确实很好用。
饶鹏 2007-11-10
  • 打赏
  • 举报
回复
> 这是C++从C继承过来的作用域特性。这样是为了要保证和main()平行的结构或变量是全局的,所以只有在函数和类的外部定义的对象才可能具有全局性。

可以加一个表示其为全局对象的符号嘛,比如"global"。除了这个以外,作用域的其他特性和C一样,还是可以兼容C吧?
storm0912 2007-11-10
  • 打赏
  • 举报
回复
为什么不能在程序的任何地方定义全局对象,而只能在所有函数外部定义?
--------------------------------------------------------------------
这是C++从C继承过来的作用域特性。这样是为了要保证和main()平行的结构或变量是全局的,所以只有在函数和类的外部定义的对象才可能具有全局性。
loops 2007-11-10
  • 打赏
  • 举报
回复
加上static的限制符后,使得A只具有内部链接,就是说别的cpp再extern int A,无法修改
在所用函数外部定义,并且把InitGlobalA放在cpp末尾的话,可以保证本cpp内其他函数无法碰到A。
而pA没有这种问题,因为pA是具有外部链接的,任何要用到pA的时候,直接extern声明一下就可以
饶鹏 2007-11-10
  • 打赏
  • 举报
回复
为什么不能在程序的任何地方定义全局对象,而只能在所有函数外部定义?

loops 2007-11-10
  • 打赏
  • 举报
回复
如下:

static int A;
int const * const pA=&A;
void InitGlobalA(int val)
{
A=val;
}

这样便万无一失了。
loops 2007-11-10
  • 打赏
  • 举报
回复
可以把int A申明成static int A,放在某个cpp的最下面,避免被别人修改,然后用int const * pA;指向A。
blldw 2007-11-10
  • 打赏
  • 举报
回复
要求不太合理
独孤过儿 2007-11-10
  • 打赏
  • 举报
回复
但是你那个A随时都可以被修改啊

还不如我想出的那种方法呢,用类把它封装起来,然后提供const接口,再加上 mutable,应该比你这个安全
加载更多回复(9)

64,647

社区成员

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

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