2012-11-13 34 views
4

在C#中提到const有許多關於C++等效的readonly的問題。然而,到目前爲止,我沒有發現任何事情,據我所知,實際上是正確的,甚至提到了我在這之後的細節。C#只讀在C++中(與const有細微的差別)

ctor中的只讀字段可以設置(甚至多次)(spec)。這允許在最終決定價值之前執行各種操作。另一方面,C++中的Const的行爲微妙地不同(在C++和C#中),因爲它要求最終值在ctor運行之前可用。

有沒有辦法在C++中實現readonly的行爲?

+0

大部分建議const –

回答

3

不是。

你可以做的就是保護一個字段,這樣它必須被一個getter訪問(至少從外部),並且你可以爲它創建一個只允許被調用一次的setter。

否則,const是你最好的選擇。

6

是,使用const - 該值不具有在編譯時是已知的:

struct X 
{ 
    const int a; 
    X(int y) : a(y) {} 
}; 

//... 
int z; 
cin >> z; 
X x(z); //z not known at compile time 
      //x.a is z 

另一種方法是使用一個用戶定義的結構,其允許設置只有一次,但這是矯枉過正(而且你可能無法在編譯時強制執行此操作)。

+0

謝謝,我站好了。 (我認爲我用C++ const搞砸了C#const。) – mafu