如前所述,您需要使用初始化對象的常量成員的initializer list:
/* a.h */
class A {
private:
const string cs;
public:
A(const string &value) :
cs(value) // <---- initialize here!.
{};
};
它是類的每一個const成員一樣:
class A {
private:
const string cs;
const float numberofthebeast;
const char z;
public:
A(const string &value, const float number, const char character) :
cs(value),
numberofthebeast(number),
z(character)
{};
};
如果你不不想提供構造函數來初始化每個值,可以在默認構造函數中提供默認值,但請記住,在構造之後不能更改該值:
class A {
private:
const string cs;
const float numberofthebeast;
const char z;
public:
A(const string &value, const float number, const char character) :
cs(value),
numberofthebeast(number),
z(character)
{};
// Default values!!!
A() :
cs("default ctor"),
numberofthebeast(666.666f),
z('Z')
{};
};
構造函數初始化列表也是有用的初始化其他成員,如O複合數據的引用不提供默認的構造函數:
const unsigned float PI = 3.14f;
class Weird
{
Weird (int w);
// no default ctor!
int W;
};
class Foo
{
// Error: weird doesn't provide default ctor,
Weird w;
// Error: reference uninitialized.
float π
};
class Bar
{
Bar() :
// Ok, Weird is constructed correctly.
w(1),
// Ok, pi is initialized.
pi(PI)
{};
Weird w;
float π
};
如果你可以在初始化後改變它,它不會是const。 –
你想要完成什麼更大的想法?爲什麼不使用訪問器方法來限制訪問? – RonaldBarzell
什麼意思是'cs' a * global *? –