关于const修饰类中的成员,用参数列表初始化

吱吱吱吱丶 2016-12-13 03:29:03
class Base
{
public:Base():number(10)
{}
private:
const int number;
};


在上述蕾中,number是一个常量,但是在类中的private中无法声明赋值,所以说需要用参数列表进行声明赋值。
请问number有分配内存空间吗?
...全文
172 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
池龙飞天 2016-12-14
  • 打赏
  • 举报
回复
类是不占空间的,只有在实例化对象的时候才会为类中的成员分配足够的空间,因此,在类中对普通成员初始化是不行,但是,你在const前面加个static就可以初始化了,因为静态变量不属于类,是为所有对象所共有。并且是存储在堆中,想要在类中初始化,你还可以使用枚举来代替const
吱吱吱吱丶 2016-12-14
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
引用 7 楼 Mce_19 的回复:
[quote=引用 5 楼 paschen 的回复:] number有分配空间,而且每个对象会有一个
请问在类设计的时候number也会有空间吗?
你在编程的时候你写的程序都没运行,又何尝空间[/quote]谢谢,茅塞顿开。
paschen 版主 2016-12-14
  • 打赏
  • 举报
回复
引用 7 楼 Mce_19 的回复:
引用 5 楼 paschen 的回复:
number有分配空间,而且每个对象会有一个
请问在类设计的时候number也会有空间吗?
你在编程的时候你写的程序都没运行,又何尝空间
吱吱吱吱丶 2016-12-14
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
number有分配空间,而且每个对象会有一个
请问在类设计的时候number也会有空间吗?
paschen 版主 2016-12-13
  • 打赏
  • 举报
回复
c++11允许写成:
class Base
{
public:Base()
{}
private:
	const int number = 10;
};
paschen 版主 2016-12-13
  • 打赏
  • 举报
回复
number有分配空间,而且每个对象会有一个
  • 打赏
  • 举报
回复
引用 3 楼 Mce_19 的回复:
引用 1 楼 hnwyllmm 的回复:
有,因为每个对象的number还是可以不同的
可能我说的不够清楚,就是类在设计的时候成员属性中有const修饰的number,在尾创建对象之前,number有内存空间吗?
number占用Base对象的空间,没Base自然没有number了。
吱吱吱吱丶 2016-12-13
  • 打赏
  • 举报
回复
引用 1 楼 hnwyllmm 的回复:
有,因为每个对象的number还是可以不同的
可能我说的不够清楚,就是类在设计的时候成员属性中有const修饰的number,在尾创建对象之前,number有内存空间吗?
吱吱吱吱丶 2016-12-13
  • 打赏
  • 举报
回复
可能我说的不够清楚,就是类在设计的时候成员属性中有const修饰的number,在尾创建对象之前,number有内存空间吗?
羽飞 2016-12-13
  • 打赏
  • 举报
回复
有,因为每个对象的number还是可以不同的

64,642

社区成员

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

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