在C#中提到const
有許多關於C++等效的readonly
的問題。然而,到目前爲止,我沒有發現任何事情,據我所知,實際上是正確的,甚至提到了我在這之後的細節。C#只讀在C++中(與const有細微的差別)
ctor中的只讀字段可以設置(甚至多次)(spec)。這允許在最終決定價值之前執行各種操作。另一方面,C++中的Const的行爲微妙地不同(在C++和C#中),因爲它要求最終值在ctor運行之前可用。
有沒有辦法在C++中實現readonly
的行爲?
在C#中提到const
有許多關於C++等效的readonly
的問題。然而,到目前爲止,我沒有發現任何事情,據我所知,實際上是正確的,甚至提到了我在這之後的細節。C#只讀在C++中(與const有細微的差別)
ctor中的只讀字段可以設置(甚至多次)(spec)。這允許在最終決定價值之前執行各種操作。另一方面,C++中的Const的行爲微妙地不同(在C++和C#中),因爲它要求最終值在ctor運行之前可用。
有沒有辦法在C++中實現readonly
的行爲?
不是。
你可以做的就是保護一個字段,這樣它必須被一個getter訪問(至少從外部),並且你可以爲它創建一個只允許被調用一次的setter。
否則,const
是你最好的選擇。
是,使用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
另一種方法是使用一個用戶定義的結構,其允許設置只有一次,但這是矯枉過正(而且你可能無法在編譯時強制執行此操作)。
謝謝,我站好了。 (我認爲我用C++ const搞砸了C#const。) – mafu
大部分建議const –