C++头文件中常量和静态常量有什么区别?

tom555cat 2013-12-04 08:16:54
在头文件里
----------------
const int AAA = 1;
----------------
static const int AAA = 1;
----------------
#ifndef M_AAA
const int AAA = 1;
#endif
----------------
这三个有什么区别?
...全文
552 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tom555cat 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 davidsu33 的回复:
1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
const对象默认为文件的局部变量,那么是不是static const和const就没什么区别了?
tom555cat 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 mougaidong 的回复:
致1、2楼: 据在下所知,const 变量是内部链接的,真的可以extern访问吗? 致3楼: const只是个编译时告诉编译器进行严格检查的关键字,运行时没有任何约束力。 [quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
引用 2 楼 Sharing_Li 的回复:
[quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
+1[/quote]
引用 3 楼 zzbutcher 的回复:
静态变量 这种方式定义的变量能被本文件内的任何函数使用。其他文件中的函数不可使用。 常量是定以后,在程序运行中不能被改变 #ifndef M_AAA const int AAA = 1; #endif #ifndef M_AAA 用来测试M_AAA有没有被宏定义过,如果没有则对#ifndef和#endif之间的代码进行编译
[/quote] 如果将const对象定义为extern const,则在其他文件中也能引用该对象。
tom555cat 2013-12-05
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
基础知识吧!可以google下 http://download.csdn.net/detail/max_min_/6333663补补基础!
就是想知道这三个什么情况下用,这个是书上没写的。
turing-complete 2013-12-05
  • 打赏
  • 举报
回复
你试过了?
引用 12 楼 davidsu33 的回复:
[quote=引用 11 楼 tom555cat 的回复:] [quote=引用 10 楼 davidsu33 的回复:] [quote=引用 9 楼 tom555cat 的回复:] [quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
const对象默认为文件的局部变量,那么是不是static const和const就没什么区别了?[/quote] 我已经说了,static和没有static的区别在于是否是本cpp文件内部访问,如果没有static,那么我们可以在头文件以extern const int AAA;的声明来使其他的CPP文件来进行访问的。[/quote] 那么没有static,也没有extern,就是一个const变量,它也只能在cpp文件内部访问啊。[/quote] 没有static是可以由外部cpp文件访问的[/quote]
davidsu33 2013-12-05
  • 打赏
  • 举报
回复
引用 11 楼 tom555cat 的回复:
[quote=引用 10 楼 davidsu33 的回复:] [quote=引用 9 楼 tom555cat 的回复:] [quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
const对象默认为文件的局部变量,那么是不是static const和const就没什么区别了?[/quote] 我已经说了,static和没有static的区别在于是否是本cpp文件内部访问,如果没有static,那么我们可以在头文件以extern const int AAA;的声明来使其他的CPP文件来进行访问的。[/quote] 那么没有static,也没有extern,就是一个const变量,它也只能在cpp文件内部访问啊。[/quote] 没有static是可以由外部cpp文件访问的
tom555cat 2013-12-05
  • 打赏
  • 举报
回复
引用 10 楼 davidsu33 的回复:
[quote=引用 9 楼 tom555cat 的回复:] [quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
const对象默认为文件的局部变量,那么是不是static const和const就没什么区别了?[/quote] 我已经说了,static和没有static的区别在于是否是本cpp文件内部访问,如果没有static,那么我们可以在头文件以extern const int AAA;的声明来使其他的CPP文件来进行访问的。[/quote] 那么没有static,也没有extern,就是一个const变量,它也只能在cpp文件内部访问啊。
davidsu33 2013-12-05
  • 打赏
  • 举报
回复
引用 9 楼 tom555cat 的回复:
[quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
const对象默认为文件的局部变量,那么是不是static const和const就没什么区别了?[/quote] 我已经说了,static和没有static的区别在于是否是本cpp文件内部访问,如果没有static,那么我们可以在头文件以extern const int AAA;的声明来使其他的CPP文件来进行访问的。
turing-complete 2013-12-04
  • 打赏
  • 举报
回复
致1、2楼: 据在下所知,const 变量是内部链接的,真的可以extern访问吗? 致3楼: const只是个编译时告诉编译器进行严格检查的关键字,运行时没有任何约束力。
引用 1 楼 davidsu33 的回复:
1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
引用 2 楼 Sharing_Li 的回复:
[quote=引用 1 楼 davidsu33 的回复:] 1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
+1[/quote]
引用 3 楼 zzbutcher 的回复:
静态变量 这种方式定义的变量能被本文件内的任何函数使用。其他文件中的函数不可使用。 常量是定以后,在程序运行中不能被改变 #ifndef M_AAA const int AAA = 1; #endif #ifndef M_AAA 用来测试M_AAA有没有被宏定义过,如果没有则对#ifndef和#endif之间的代码进行编译
SKATE11 2013-12-04
  • 打赏
  • 举报
回复
#ifndef M_AAA const int AAA = 1; #endif 这样做可防止头文件重复引用问题
max_min_ 2013-12-04
  • 打赏
  • 举报
回复
基础知识吧!可以google下 http://download.csdn.net/detail/max_min_/6333663补补基础!
zzbutcher 2013-12-04
  • 打赏
  • 举报
回复
静态变量 这种方式定义的变量能被本文件内的任何函数使用。其他文件中的函数不可使用。 常量是定以后,在程序运行中不能被改变 #ifndef M_AAA const int AAA = 1; #endif #ifndef M_AAA 用来测试M_AAA有没有被宏定义过,如果没有则对#ifndef和#endif之间的代码进行编译
Sharing_Li 2013-12-04
  • 打赏
  • 举报
回复
引用 1 楼 davidsu33 的回复:
1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
+1
davidsu33 2013-12-04
  • 打赏
  • 举报
回复
1. const int AAA = 1; 说明是常量,外部文件可以extern访问 2.static const int AAA = 1; 仅本文件内部可以访问 3. #ifndef M_AAA const int AAA = 1; #endif 根据宏的定义与否,与1的情况完全一样。
自己整理的C++要背的一些概念,华南师范大学考c++的建议看看,21届考研有考到哦!!(可打印版) 1. 面向对象的三个基本特征 4 2. 抽象 4 3. 如何实现多态性 4 4. const与define的区别 4 5. static作用 4 6. 静态数据成员与静态成员函数 5 7. 静态数据成员与全局变量的不同 5 8. 为什么引入友元的概念? 5 9. 什么是友元函数? 5 10. 友元成员函数 5 11. 友元类 5 12. 函数重载 5 13. 运算符重载 6 14. 运算符重载函数的使用 6 15. 重载运算符的规则 6 16. 为什么要使用继承 6 17. 保护成员的作用 6 18. 多重继承 6 19. 虚基类及其作用 6 20. 派生类的构造函数和析构函数的构造规则 7 21. 虚函数及其作用 7 22. 静态关联和动态关联 7 23. 函数重载与虚函数的不同 7 24. 虚析构函数 8 25. 纯虚函数 8 26. 抽象类 8 27. 抽象类与接口的区别 8 28. 32.输入输出流 8 29. 标准的输出流对象有哪些 8 30. 标准的输入流对象有哪些 9 31. 文件流类与文件流对象 9 32. 两个短整型数相加后,结果是什么类型? 9 33. 什么是值传递? 9 34. 值传递、引用传递和指针传递的区别是什么? 9 35. 什么是函数模板?什么是模板函数?函数模板有什么用途? 9 36. C++是如何实现函数重载的? 10 37. 全局变量和局部变量的主要区别是什么? 使用全局变量有什么好处?有什么坏处? 10 38. 变量定义和变量声明有什么区别? 10 39. 引入结构体有什么好处? 10 40. 单链表为什么要引入头结点? 10 41. 结构体类型定义的作用是什么? 结构体类型的变量定义的作用是什么? 10 42. 用自己的话描述逐步细化的过程 10 43. 为什么库的实现文件要包含自己的头文件? 11 44. 什么头文件要包含 #ifndef...#endif这对编译预处理指令? 11 45. 为什么要使用库? 11 46. 用struct定义类型与用class定义类型有什么区别? 11 47. 构造函数和析构函数的作用是什么?它们各有什么特征? 11 48. 友元的作用是什么? 11 49. 静态数据成员有什么特征?有什么用途? 11 50. 在定义一个类时,哪些部分应放在头文件(.h文件),哪些部分应放在实现文件(.cpp文件)? 12 51. 什么情况下类必须定义自己的复制构造函数? 12 52. 常量数据成员和静态常量数据成员有什么区别?如何初始化常量数据成员?如何初始化静态常量数据成员? 12 53. 什么是this指针?为什么要有this指针? 12 54. 复制构造函数的参数为什么一定要用引用传递,而不能用值传递? 12 55. 构造函数为什么要有初始化列表? 12 56. 如何区分++和--的前缀用法和后缀用法的重载函数? 12 57. 类有几个默认的成员函数? 13 58. 什么是抽象类?定义抽象类有什么意义? 抽象类在使用上有什么限制? 13 59. 为什么要定义虚析构函数? 13 60. 试说明派生类对象的构造和析构次序。 13 61. 试说明虚函数和纯虚函数有什么区别 13 62. 基类指针可以指向派生类的对象, 为什么派生类的指针不能指向基类对象? 13 63. 如果一个派生类新增加的数据成员有一个对象成员,试描述派生类的构造过程 13 64. 为什么函数模板的使用与普通的函数完全一样, 而类模板在使用时还必须被实例化? 13 65. 类模板继承时的语法与普通的类继承有什么不同? 13 66. 什么是打开文件?什么是关闭文件?为什么需要打开和关闭文件? 14 67. 为什么要检查文件打开是否成功?如何检查? 14 68. ASCII文件和二进制文件有什么不同? 14 69. C++有哪4个预定义的流? 14 70. 什么时候用输入方式打开文件?什么时候应该用输出方式打开文件?什么时候该用app方式打开文件? 14 71. 哪些流操纵符只对下一次输入/输出有效?哪些流操纵符是一直有效直到被改变? 14 72. 什么叫做作用域?什么叫做局部变量? 什么叫做全局变量? 14

64,654

社区成员

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

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