C# 在 C++ 中只读(与 const 的细微差异)
C# readonly in C++ (subtle differences to const)
关于 C# 中提到 const
的 readonly
的C++等价物有很多问题。然而,到目前为止,据我所知,我没有发现任何实际上是正确的,甚至没有提到我在这里追求的细节。
只读字段可以在 ctor (spec) 中设置(甚至多次)。这允许在最终确定值之前执行各种操作。另一方面,C++ 中的 Const 的行为略有不同(在 C++ 和 C# 中),因为它要求最终值在 ctor 运行之前可用。
有没有办法在C++中仍然实现readonly
的行为?
是的,使用 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
另一种选择是使用仅允许设置一次的用户定义结构,但这是矫枉过正的(无论如何您都可能无法在编译时强制执行)。
不是真的。
你可以做的是保护一个字段,以便它必须被getter访问(至少从外部),你可以为它创建一个只允许自己被调用一次的setter。
否则,const
是您最好的选择。