类内const static(static const)成员变量初始化问题
来源:互联网 发布:手机备份软件排名 编辑:程序博客网 时间:2024/04/28 18:57
在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题。
查阅了许多资料,发现VC环境下,只允许const static成员变量在类外初始化,这个应该是编译器遗留下的bug(你也可以说是要求严格)。
在其他编译器下,整型以及枚举类型的const static成员变量是允许在声明的同时进行初始的,其中整型包括int、short、long、char等,非整型是指浮点型 包括float、double等。尽管可以在类内进行初始化,但是我在网上看到两种解释:
解释一
虽然可以进行初始化,但是这种初始化时不够严格地,倘若对变量取地址 (这里并不是指 &操作符,而是指所有需要用到这个变量的存储空间的操作 比如 ++ 之类,其实这儿我也没看懂到底什么是取地址),就会出现错误,这是因为这种在类内的初始化是不会分配内存的,应当再次在类外进行定义来获取内存分配(无需再赋值)。
class people{
public:
const static int age = 18;
};
const int people::age;
解释二
之所以整型有这种特权,是为了设计一个更明确(类型)的常量定义语法来取代用enum定义常量的旧方式。因为出发点是这个,所以才仅仅只是对静态整形常量特殊处理,因为enum也只能是整型值。现在的最新标准完全允许在类内进行定义,并且当你用到取地址操作时,它就会分配内存,类似于常量折叠(const folding),所以无需在外再次定义,这是完全没有问题的。
class people{
public:
const static int age = 18;
};
//不需要const int people::age;
对于上述解释,作为一个初学者,也没法从绝对的知识点上判断到底哪个是对的,根据我在VS2013中敲代码实际测试来看,解释一、二是代码都是对的,都不会报错,但是我在codeblock中运行时,如果对age进行const int *p=&people::age操作时,一不会报错而二报错,所以我支持解释一的说法。如果有哪位大神有幸看到这篇文章,还望指点一二,感激不尽!
- 类内const static(static const)成员变量初始化问题
- 初始化const, static, const static, static const成员变量
- 初始化const, static, const static, static const成员变量
- c++类中static、const、static const成员变量初始化
- c++类中const/static/const static成员变量初始化
- const static const static成员变量的初始化
- 类的const成员变量、static const、static成员变量的初始化
- 类的const成员变量、static const、static成员变量的初始化
- static const * const 类成员 初始化
- static const 型成员变量的初始化
- static,const,static const , const static成员初始化
- C++ 类成员变量初始化 static / const / auto
- C++中类const、static、static const成员变量
- 类的const、static、const static成员初始化位置及其他需要注意的问题
- C++中的const,static const和static类成员的初始化问题
- C++中的const,static const和static类成员的初始化问题
- const 成员 static 成员 const static int 成员初始化
- const 成员 static 成员 const static int 成员初始化
- android ndk 项目导入时出现的问题:Unresolved inclusion: <jni.h>
- Android之ContentProvider总结
- C++中Const说明
- 电影推荐之协同过滤
- 分享一个改进后的冒泡排序算法(C#实现)
- 类内const static(static const)成员变量初始化问题
- 【转】C数据存储(包括const存储在哪,C++不同部分我在文中用红字已指出)
- sizeof的作用——解释类中与类之外static变量的情况
- C++空类以及没有成员变量的类的大小
- Android Service 解析
- error127:The specified procedure could not be found.无法找到入口 无法定位程序输入点xxx 于动态链接库ulib.dll上
- 将博客搬至CSDN
- 分享一篇不错的博文《写给准备参加秋招的学弟学妹们~一定要来看哦~》
- Linux上的free命令详解