关于「只有静态常量整型数据成员才可以在类中初始化」的若干

黄微 2014-03-18 02:42:05
今天刚看了一下C++语法,并安装了VS2012,在类中初始化定义的数据时提示这个错误。
所以想问问:
为什么「只有静态常量整型数据成员才可以在类中初始化」?(好像在其他编译环境下都没有这样的情况啊)
那么我一个很大的数组想全部初始化为零应该如何做? (也就是说不能使用int a[0] = {0};了)
...全文
1547 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2014-03-20
  • 打赏
  • 举报
回复
c++11支持in-class初始化了。 不过楼主这种,在构造函数中初始化就可以了吧。
A::A() {
    memset(a, 0, sizeof(a));
}
lm_whales 2014-03-20
  • 打赏
  • 举报
回复
C++11 非静态数据初始化
class A{

int x{20};
int a[100]{1,2,3,4,5,.......};//等号也不需要了
};
ithiker 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 OmnipotentYouth 的回复:
能否给个简单的例子,例如我想初始化一个含有50个数据的int类型数组,全部初始化为0 该怎么做;)
在构造函数中初始化
tanjingfei123 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 OmnipotentYouth 的回复:
能否给个简单的例子,例如我想初始化一个含有50个数据的int类型数组,全部初始化为0 该怎么做;)
class A { public: A(){a[50]={想怎么赋都行}}; int a[50]; };
lm_whales 2014-03-18
  • 打赏
  • 举报
回复
C++11 之前的标准 只有静态常量整型数据成员,才可以在类中初始化。 这是因为,当时认为,类定义中的数据定义,是一种声明,不是数据定义。 当用类 定义对象(变量,常量)时候,才开始定义数据。 静态常量整型数据成员 1)不是对象的一部分 2)可以产生常量表达式,所以可以在类中初始化。---否则,用它作为数组的大小,就不合适了。 静态常量整型数据成员,能够用来当作常量表达式使用, 不在内部定义的话,则该常量表达式未定义,就不能使用了。 C++11 非静态成员变量(常量),可以直接初始化,或者在初始化表中初始化。 C++11 中 初始化非静态成员变量(常量),可以看作赋给变量(常量)一个默认值。
沙尘暗影 2014-03-18
  • 打赏
  • 举报
回复
int a[50] = {};
xiaohuh421 2014-03-18
  • 打赏
  • 举报
回复
int Val[0x100] = {0}; 010B55A2 mov dword ptr [Val],0 010B55AC push 3FCh 010B55B1 push 0 010B55B3 lea eax,[ebp-404h] 010B55B9 push eax 010B55BA call memset (115BDD0h) //memset调用 010B55BF add esp,0Ch
xiaohuh421 2014-03-18
  • 打赏
  • 举报
回复
使用memset根你的{0}实际是一个效果. 你自己可以使用反汇编看看, 其实={0}在数组元素比较多的时候就会被编译成memset.
敬畏者 2014-03-18
  • 打赏
  • 举报
回复
在构造函数的初始化列表中 似乎也不能初始化数组,除非用统一初始化{} 但这个也不支持 所以,在构造函数中 memset 之类的 手动修改内存值吧
titer1 2014-03-18
  • 打赏
  • 举报
回复
印象中,静态常量整型数据成员只分配一次空间
黄微 2014-03-18
  • 打赏
  • 举报
回复
能否给个简单的例子,例如我想初始化一个含有50个数据的int类型数组,全部初始化为0 该怎么做;)
敬畏者 2014-03-18
  • 打赏
  • 举报
回复
C++ 11 是支持 类内初始化的,意味着你安装的如果是vs2013就没这个问题了 按你的情况,可以在构造函数的初始化列表中初始化.

65,208

社区成员

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

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