社区
C++ 语言
帖子详情
C++中为什么不能在类定义中初始化非静态成员变量
launch401
2007-09-11 11:17:47
而必须在构造函数中初始化呢?
...全文
1211
14
打赏
收藏
C++中为什么不能在类定义中初始化非静态成员变量
而必须在构造函数中初始化呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stushl
2011-05-07
打赏
举报
回复
1
静态也不能在类中初始化啊
taodm
2007-09-11
打赏
举报
回复
规定,这就够了。
lockhall
2007-09-11
打赏
举报
回复
偶就知道是规定。
arong1234
2007-09-11
打赏
举报
回复
没那么多为什么,就是规定
launch401
2007-09-11
打赏
举报
回复
我理解还是设计理念的不同,其实java/C#中可以在类定义中“初始化”变量也是出于安全考虑,他们的初始化实际上是给出默认值,实际赋值过程还是在调用构造函数的时候(之前)
fish6344
2007-09-11
打赏
举报
回复
C++中为什么不能在类定义中初始化非静态成员变量?
首先,类究竟什么?类是一个对事物具体抽象的模型,注意,它仅是一个抽象的、慨念上的东东。从程序设计层面看,它仅是一个声明,并不代表一个具体的实例,例如:
class Fish
{
long _x;
void show(void);
}
//即使它有成员函数的定义:
void Fish::show(void)
{
}
即使它有成员函数的定义,但在内存实例这个层面,它什么也没有!什么都没有,你到那儿去初始化它的成员x呢?
而且,从类的语意来看,它表示有无限个具有相似性(不是相同性)的对象实例的抽象慨括,非静态成员变量对类来说,是一个变化的值(有无穷的解),它是类的可变部份,语言以及类的设计者不能以相同的值去初始化其可变部份(x)!
但对类的不变部份,语言还是适当的允许你在类中去初始化,例如整型int及类整型(long、
char等)等静态常量你还是可以在类中初始化它们的!
arong1234
2007-09-11
打赏
举报
回复
规定,而且也不应该在构造函数中初始化,如果你这样做了,说明你代码写错了
合理的做法
class A
{
static int i;
};
int A::i =0; //这才是合理的初始化方式
storin
2007-09-11
打赏
举报
回复
支持ar_2002的说法,类的声明没有实际分配内存,怎么初始化?
ar_2002
2007-09-11
打赏
举报
回复
定义类的时候并没有分配内存,这时候赋值的话值放在哪里呢?
当用类构造对象的时候首先分配内存然后调用构造函数,这时候才可以初始化非静态成员变量.
静态成员变量定义的时候在静态存储区中就分配了内存所以可以初始化.
benjamin_pan
2007-09-11
打赏
举报
回复
C++中为什么不能在类定义中初始化非静态成员变量
你都说是在类的定义中了,只是定义了类,没有实例化,static可以初始化是因为它是保存在内存中类外的全局变量区域的
zyx040404
2007-09-11
打赏
举报
回复
编译器的限制
如果是static的就可以,因为编译器可以
shrinerain
2007-09-11
打赏
举报
回复
其实C#的初始化是编译器自动生成了一个特殊的函数.ctor,这个函数里面进行初始化工作...
C++编译器没有这个功能.
shrinerain
2007-09-11
打赏
举报
回复
规定而已...
C#可以...C++就不可以....
至于哪个好...仁者见仁...
jxlczjp77
2007-09-11
打赏
举报
回复
如果成员都在定义时给了默认初始值,那还要构造函数干嘛?
构造函数本来就是为了所有成员初始化而存在的,这样集中初始化可以方便管理。
假如有一个非常大的类,上百个成员函数,又有N个成员变量夹杂在这么多成员函数中,假如成员变量可以定义时给定初值的话,那么你决得是分散在各个成员变量定义时初始化好呢?还是集中在一个构造函数中初始化好呢?
C++
静态成员变量
的
初始化
需要注意的是:静态数据成员
不能
在
类
中
初始化
,一般在
类
外和main()函数之前
初始化
,缺省时
初始化
为0。 1.static成员的所有者是
类
本身,但是多个对象拥有一样的静态成员。从而在
定义
对象是
不能
通过构造函数对其...
C++
之变量
初始化
顺序
类
中
static成员变量,必须在
类
外
初始化
; 成员变量在使用
初始化
列表
初始化
时,与构造函数
中
初始化
成员列表的顺序无关,只与
定义
成员变量的顺序有关; 成员变量在构造函数
中
初始化
时,成员变量在构造函数
中
的顺序...
关于
C++
11
静态成员变量
的
类
内
初始化
C++
静态成员变量
的
类
内
初始化
c++
中
对
类
中
私有成员
中
的静态变量
初始化
2.静态成员
不能
在
类
定义
里边
初始化
,只能在class body外
初始化
。 3.静态成员仍然遵循public,private,protected访问准则。 4.静态成员函数没有this指针,它
不能
返回
非
静态成员,因为除了对象会调用它外,
类
本身也...
C++
11(一):在
类
的
定义
时
初始化
非
静态变量
甚至在一些“老程序员”看来,由于他们不了
C++
11标准新加入的内容,一些正常的程序常常被当做BUG处理,接下来我们就看看
C++
11加了那些特性,今天我们来测试一下:“在
类
的
定义
时
初始化
非
静态变量”。不得不承认
C++ 语言
64,267
社区成员
250,463
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章