如果一个已经被赋值的const变量仍然可以被重新赋值,那么它不是一个const?举个例子:
struct ss
{
const int m = 1024;
ss()
{
}
ss(int m) : m(m)
{
}
};
ss sa;
ss sb(-1);
cout << sa.m << endl;
cout << sb.m << endl;
哇 m 毕竟不是常数!
> /* Ouput: > > 1024 > -1 > > */
最佳答案
ss(int m) : m(m)
{
}
这表示当类 ss
被初始化时,它的成员 m
使用参数 m
被初始化。成员 m
确实不能修改,但可以初始化,就像任何其他 const
对象一样。请注意,如果我们改为这样做
ss(int m)
{
this->m = m;
}
那么我们就会遇到问题,因为 ss::m
需要初始化。如果 ss::m
是一个带有默认构造函数的类,那么在
ss(FooClass m)
{
this->m = m;
}
不显式初始化 ss::m
是可以的(因为它只是默认构造的),但是构造函数主体中的行将被拒绝,因为它会修改 ss::m
在它已经被初始化之后。
编辑:糟糕,我不明白你原来的问题。
brace-or-equal-initializer 例如
const int m = 1024;
仅在 ctor-initializer 中未提及成员时使用。换句话说,由于默认构造函数没有显式初始化 m
,因此使用值 1024。但是 ss::ss(int)
确实显式初始化了 m
,所以 brace-or-equal-initializer 被忽略了。
关于c++ - 为什么声明为类成员的 const 变量仍然可以修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226054/