- 论坛徽章:
- 0
|
10可用积分
下面这段代码可以运行
#include<stdio.h>
int k=2;
class c{
public:
int i;
const int j;
c():j(++k){}
};
int main(void){
printf("sizeof c is %d\n",sizeof(c));
c c1;
c c2;
printf("c1.j=%d,c2.j=%d\n",c1.j,c2.j);
};
结果是
sizeof c is 8
c1.j=3,c2.j=4
但是我把构造函数的c():j(++k){}改为c(){j=++k;}就不行,
h.cxx:7: 错误:assignment of read-only data-member ‘c::j’
我的问题是: 初始化列表不算赋值语句吗?
谢谢!!!!!!!!!!!!!!!!!!!!!!! |
最佳答案
查看完整内容
当然不算咯。 初始化和赋值是两个不同的概念。对buildin类型, 初始化和赋值并没有太大区别, 可以在初始化时, 给它一个值, 或者在使用前, 给它赋值。但是, 如果加了const限定, 情况就不同了。 const对象只能初始化, 一旦初始化完毕, (通常)不能再被改变(包括赋值)。因为j是一个const对象, 所以只能初始化, 而不能赋值。C++构造函数中, 成员初始化列表, 就是执行初始化的部分; 构造函数体执行时,该对象已经构造 ...
|