社区
C++ 语言
帖子详情
C++中为什么不能在类定义中初始化非静态成员变量
launch401
2007-09-11 11:17:47
而必须在构造函数中初始化呢?
...全文
1374
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成员的所有者是
类
本身,但是多个对象拥有一样的静态成员。从而在
定义
对象是
不能
通过构造函数对其进行
初始化
。 2.静态成员
不能
在
类
定义
里边
初始化
,只能在class body外
初始化
。 3.静态成员仍然遵循public,private,protected访问准则。 4.静
C++
语言特性07 - 静态成员的
初始化
1.
静态成员变量
通常在
类
定义
内部声明,并在
类
定义
外部
定义
和
初始化
。2. 从
C++
11开始,可以在
类
内直接
初始化
静态数据成员(对于基本数据
类
型和枚举
类
型)。这被称为。3.
静态成员变量
的
初始化
在main函数执行之前,且在任何对象创建之前完成。这意味着在任何对象构造之前,静态成员已经被正确
初始化
。4. 静态成员函数可以访问
静态成员变量
,但
不能
访问
非
静态成员变量
。5.
静态成员变量
的
初始化
是线程安全的。
C++
标准保证在任何线程开始运行之前,
静态成员变量
已经被
初始化
。
C++
11(一):在
类
的
定义
时
初始化
非
静态变量
前言距离
C++
11标准发布时间大约有六年了,但是
C++
11的诸多特性并未在程序界达到普及的状态,甚至在一些“老程序员”看来,由于他们不了
C++
11标准新加入的内容,一些正常的程序常常被当做BUG处理,接下来我们就看看
C++
11加了那些特性,今天我们来测试一下:“在
类
的
定义
时
初始化
非
静态变量”。不得不承认
【
C++
】成员属性为什么
不能
直接
初始化
静态成员属性为什么要
类
外部
定义
(
初始化
)
C++
对象成员属性为什么
不能
声明时
初始化
,
C++
静态成员属性外部
定义
原因struct和class的区别
C++
对象成员属性为什么
不能
声明时
初始化
C++
静态成员属性外部
定义
原因 struct和class的区别 首先struct肯定都知道,是用于声明结构体的,在
C++
中
struct和class概念是相同的 虽然概念是相同的,但是还是有一些区别: 1 .默认继承权限:如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; 2. 成员的默认访问权限:class
C++
之变量
初始化
顺序
C++
中
变量的
初始化
顺序如下: 1.基
类
的静态变量或全局变量; 2.派生
类
的静态变量或全局变量; 3.基
类
的成员变量; 4.派生
类
的成员变量;
类
成员变量
初始化
时注意事项:
类
成员在
定义
时
不能
初始化
;
类
中
const成员常量必须在构造函数
初始化
列表
中
初始化
;
类
中
static成员变量,必须在
类
外
初始化
; 成员变量在使用
初始化
列表
初始化
时,与构造函数
中
初始化
成员列表的顺序无关,只与
定义
成员变量的顺序有关; 成员变量在构造函数
中
初始化
时,成员变量在构造函数
中
的顺序有关。 ...
C++ 语言
65,180
社区成员
250,528
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章