为什么“只有静态常量整型数据成员才可以在类中初始化”

时间:2022-05-15 05:14:43
今天编译一小段程序的时候,出现“只有静态常量整型数据成员才可以在类中初始化”,为什么C++只允许静态常量整型在类中初始化,而其他类型都不允许呢,大神能解释一下什么原因吗,要是能提供一种解决的办法更好,谢谢!
初始化静态常量如下:

private:
const static double conv_alpha = 1.0/255.0;

4 个解决方案

#1


这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

#2


引用 1 楼 supermegaboy 的回复:
这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

就是说C++类定义的静态常量数据成员不能在类中初始化,而整形只是这个规则下的一个特例,而C++本身并没有给出制定这种规则的原因,是这样吗?以前习惯了Java的编程,对这种要求感觉很难理解。。

#3


这就觉得难理解啊?

你一定得暂时忘记java带来的各种习惯,否则,思维风暴才刚刚冒了个头,你有的是时间去享受C++各种复杂特性。

#4


引用 2 楼 xiaoqiangy2012 的回复:
Quote: 引用 1 楼 supermegaboy 的回复:

这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

就是说C++类定义的静态常量数据成员不能在类中初始化,而整形只是这个规则下的一个特例,而C++本身并没有给出制定这种规则的原因,是这样吗?以前习惯了Java的编程,对这种要求感觉很难理解。。

这是C++98的规定,没什么需要解释的。
C++11下成员变量也可以在类中初始化了。

#1


这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

#2


引用 1 楼 supermegaboy 的回复:
这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

就是说C++类定义的静态常量数据成员不能在类中初始化,而整形只是这个规则下的一个特例,而C++本身并没有给出制定这种规则的原因,是这样吗?以前习惯了Java的编程,对这种要求感觉很难理解。。

#3


这就觉得难理解啊?

你一定得暂时忘记java带来的各种习惯,否则,思维风暴才刚刚冒了个头,你有的是时间去享受C++各种复杂特性。

#4


引用 2 楼 xiaoqiangy2012 的回复:
Quote: 引用 1 楼 supermegaboy 的回复:

这是C++98/03的规则,因为类定义只是一个框架,不是实例,所以C++98/03要求在构造函数或者成员定义中初始化,静态整形const数据成员只是个特例。

但这一点在C++11中有了变化,C++11允许就地初始化了。

就是说C++类定义的静态常量数据成员不能在类中初始化,而整形只是这个规则下的一个特例,而C++本身并没有给出制定这种规则的原因,是这样吗?以前习惯了Java的编程,对这种要求感觉很难理解。。

这是C++98的规定,没什么需要解释的。
C++11下成员变量也可以在类中初始化了。