C# 在 C++ 中只读(与 const 的细微差异)

C# readonly in C++ (subtle differences to const)

本文关键字:const C++ 只读      更新时间:2023-10-16

关于 C# 中提到 constreadonly 的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是您最好的选择。