热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

const变量的链接性

《C++PrimerPlus(第五版)中文版》P277:在C++(但不是在C语言)中,const对默认存储类型稍有影响。默认情况下,全局变量的链接性为外部的,但cons

《C++ Primer Plus(第五版)中文版》P277:

在 C++ (但不是在 C 语言)中,const 对默认存储类型稍有影响。默认情况下,全局变量的链接性为外部的,但 const 全局变量的链接性为内部的。也就是说,在 C++ 看来,全局 const 定义就像使用了 static 说明符一样。

 

测试代码(VS2010 /W4 /WX):

输出:

 
结论:
(1) const 变量的内部链接性使得其它文件中无法引用它。如,const int const_var2 = 2; ;
(2) 在定义常量时,使用 extern 关键字可覆盖默认的内部链接性。如,extern const int const_var = 1; ,在这种情况下,必须在所有使用该常量的文件中用 extern 关键字来声明它。这与常规外部变量不同,定义常规外部变量时,不必使用 extern 关键字,但在使用该常量的其它文件中必须使用 extern;
(3) 由于 const 变量的链接性是内部的,因此,可在不同文件中定义相同的变量而不会引起变量重复定义;且该常量仅隶属于定义它的文件,不同文件中常量的值可不同。如,const_var_def.cpp 中 const double const_var3 = 3.3; ,而 main.cpp 中 const double const_var3 = 33.33; 。 

 

疑问:
(1) 错误提示中的 (?const_var2@@3HB) 和 (?const_var3@@3NB) 名字是根据什么规律解析得到的?
(2) 对于常量 const_var3,为什么不能在 Line17 等代码块中使用其前进行声明,而必须在 Line5 等代码块以外使用其前进行声明?g_foo 都可以!难道因为它是 const 变量?难道因为 Line5 位置的声明和其定义(Line24)位于同一作用域(scope)?困惑!
 
另外:
编译器给出的错误提示信息中使用了 "int const" ,而不是 "const int" ,虽然意义相同,但前者更容易理解,正如《C++ Templates》中所言。


推荐阅读
author-avatar
31號_K
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有