![](/img/trans.png)
[英]Why do non-const, non-int/enum static data members have to be initialized outside the definition?
[英]Non static const data members
如何在C ++中定義類的非靜態const數據成員? 如果我嘗試編譯以下代碼:
class a
{
public:
void print()
{
cout<<y<<endl;
}
private:
const int y=2;
};
int main()
{
a obj;
obj.print();
}
我得到一個錯誤
ISO C++ forbids initialization of member ‘y’
在C ++ 03中,可以使用構造函數中的成員初始化器列表來初始化類的const
字段。 例如:
class a
{
public:
a();
void print()
{
cout<<y<<endl;
}
private:
const int y;
};
a::a() : y(2)
{
// Empty
}
注意構造函數后的語法: y(2)
。 這告訴C ++將字段y
初始化為具有值2。更一般而言,您可以使用此語法將類的任意成員初始化為您希望它們具有的任何值。 如果您的類包含const
數據成員或作為引用的數據成員,則這是正確初始化它們的唯一方法。
請注意,在C ++ 11中,放寬了此限制,可以在類主體中為類成員分配值是很好的。 換句話說,如果您等了幾年才編譯原始代碼,那么它應該可以編譯。 :-)
在構造函數初始化列表中對其進行初始化。
class a
{
const int y;
public:
a() : y(2) { }
};
您不能在類定義內使用初始化程序。 您需要使用構造函數初始化:
a::a() : y(2) {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.