"Const" and "Static"
2009-12-15 22:51
323 查看
今天看到一些关于const和static关键字区别的资料。发现细究起来名堂还挺多。但若自己不在实际编程中使用,过不了多久又都忘的差不多了,所以感觉技术着东西还是要经常使用,在实践中去摸索才能很好的掌握和灵活的应用。
就我目前对这两个关键字的理解,我觉得主要在下面两种情况中使用的较多一些。
1.使用const的情况
希望程序中的某个变量(或参数)是一个固定值,在程序运行的任何阶段这个量都不改变。比如定义的数组的大小。
明确了使用的情况那么它的一些特性我们能更好的理解,比如const修饰的变量是不希望在程序运行过程中被改变的,那么它就必须在声明是就初始化,所以在程序的其他位置对它进行赋值操作都被视为非法的。
2.使用static的情况
针对面向对象设计思想而言,当希望某个类成员(可以是属性也可以是方法)是属于类本身,而不是类的实例对象时,我们可以考虑用static来修饰它。
同样明确了使用的情形对static的一些特性也较好理解了,比如static不能去修饰类成员函数中的变量,原因就是非static的类的成员函数在每个类实例中都会复制一份,而static修饰的变量是属于整个类的而不是类对象的。
以上只是我在实际使用过程中的一些肤浅的理解,目的是想把这些看似细小的问题理一理,不是刻意去记住他们各自的特性和区别,而是通过自己经常使用的情形帮助自己来理解和区分。
就我目前对这两个关键字的理解,我觉得主要在下面两种情况中使用的较多一些。
1.使用const的情况
希望程序中的某个变量(或参数)是一个固定值,在程序运行的任何阶段这个量都不改变。比如定义的数组的大小。
明确了使用的情况那么它的一些特性我们能更好的理解,比如const修饰的变量是不希望在程序运行过程中被改变的,那么它就必须在声明是就初始化,所以在程序的其他位置对它进行赋值操作都被视为非法的。
2.使用static的情况
针对面向对象设计思想而言,当希望某个类成员(可以是属性也可以是方法)是属于类本身,而不是类的实例对象时,我们可以考虑用static来修饰它。
同样明确了使用的情形对static的一些特性也较好理解了,比如static不能去修饰类成员函数中的变量,原因就是非static的类的成员函数在每个类实例中都会复制一份,而static修饰的变量是属于整个类的而不是类对象的。
以上只是我在实际使用过程中的一些肤浅的理解,目的是想把这些看似细小的问题理一理,不是刻意去记住他们各自的特性和区别,而是通过自己经常使用的情形帮助自己来理解和区分。
相关文章推荐
- 【c++笔记七】教你使用"const类型的对象、成员函数"和"static类型的成员函数、变量"
- "Introduction to the Theory of Computation" Reading notes - Ch. 0 and 1
- "==" and "equals"
- error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const
- "Balancing Agility and Discipline" 中文版——《平衡敏捷与规范》终于要出版了
- "The connection to adb is down, and a severe error has occured"错误解决方法
- "Programming Microsoft DirectShow for Digital Video and Television"中简介的翻译收
- ibatIS的<dynamic prepend="WHERE">原理,是判断前一个AND字母是否存在
- "Argument list too long": Beyond Arguments and Limitations
- "The C Programming Language", 2nd edition, Kernighan and Ritchie
- "const char *p" 和 "char * const p" 有何区别?
- VS2013 中IntelliSense: "const char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
- (C#) What is the difference between "const" and "static readonly" ?
- "const T " VS "T const " VS const 作用汇总
- "Cannot declare member function ...to have static linkage"错误
- 函数声明末尾的"const"表示什么?
- "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容
- vs2013 IntelliSense: "const char *" 类型的实參与 "LPCWSTR" 类型的形參不兼容
- "ORA-12012: error on auto execute of job ORACLE_OCM.MGMT_CONFIG_JOB_2_1" And "ORA-29280: invalid dir
- "Programming Microsoft DirectShow for Digital Video and Television"中简介的翻译