2011-07-29 15 views
0

類中的數據成員可以是const,但只有它的靜態。否則我們需要一個構造函數來初始化一個類中的常量。在編碼時聲明類中的非靜態常量數據成員是否合適?

can we declare a const data member inside a class? //this was an interview question 

在我看來,我們可以,但它是適合程序員在類中聲明常量。

請給出一些解釋/理由,爲什麼我們可以或不可以做?

回答

1

當然,你可以:

struct A 
{ 
    A() : a(5) 
    { 
    } 
    const int a; 
}; 

int main() 
{ 
    A a; 
} 

這意味着數據成員,內部結構A不打算改變。

+0

它是良好的編程習慣這樣做(我的意思是有沒有其他更好的方式)以及如果數據成員是私人的話。 – munish

+0

@munish如果這個數據成員在這個類型的對象的生命週期中不應該改變,那麼可以隨意聲明它爲const。在google上查找「const正確性」 –

1

簡答題:您可以在課堂中使用非靜態const成員。

由於您仍然需要爲其分配一個值,因此唯一允許您進入初始化列表的位置。

而且,如果你的會員真的是不變的話,那麼這樣做總是一個很好的理由。我的意思是,const-correctness主要是一個可選工具來幫助更好的編碼,所以如果你想使用它,你會稍後感謝你自己。如果你不使用它,那麼它並不重要!

1

確定您是否有一些常量要在您的班級中使用,並且屬於班級。

例如,假設你有一個唯一的ID一些數據類型,ID標識對象的爲此永遠不會改變:

class myData { 
    cont int ID; 
    myData(int newID) : ID(newID) {} 
}