根据我的测试,对象在创建后仍然可以修改。
//Let's use this copy constructor as an example:
Foo::Foo( const Foo& F )
{
var = F.var;
}
//With this code:
Foo f1;
const Foo f2(f1); //No Error?
没有初始化列表,因此 f2在创建后正在修改。因此,如果 Foo 的成员仍然是可修改的,那么保持不变的是什么?
f2
创建后不被修改。这条线
const Foo f2(f1);
创建f2
,并且f2
可以在构造函数的主体中修改它自己的数据成员。一旦构造函数的主体退出,对象就被完全构造并且不能被修改。
有几点值得一提:
var
是const
,则必须在构造函数的初始化列表中对其进行初始化,并且不能在构造函数的主体中对其进行修改。这与您是否有const
Foo
实例无关。var
已声明mutable
,则可以const Foo
通过const
修改var
.对象的生命周期在其构造函数完成之前不会开始(C++03 3.8“对象生命周期”),因此在此之前没有什么是const
. 特别是,C++03 12.1/4 "Constructors" 说:
const
和volatile
语义(7.1.5.1)不适用于正在构建的对象。此类语义仅在最派生对象 (1.8) 的构造函数结束后才生效。