C#readonly in C ++(与const的细微差别)

时间:2012-11-13 14:11:41

标签: c# c++ constructor const readonly

关于C#提及readonlyconst的C ++等价物有很多问题。然而,到目前为止,我发现没有,据我所知,实际上是正确的,甚至没有提到我在此之后的细节。

可以在ctor(spec)内设置只读字段(甚至多次)。这允许在最终确定值之前执行各种操作。另一方面,C ++中的Const的行为略有不同(在C ++和C#中),因为它需要在ctor运行之前提供最终值。

有没有办法在C ++中实现readonly的行为?

2 个答案:

答案 0 :(得分: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

另一种方法是使用一个只允许设置一次的用户定义结构,但这样做太过分了(无论如何你可能无法在编译时强制执行此操作)。

答案 1 :(得分:3)

不是。

你可以做的是保护一个字段,以便它必须被一个getter访问(至少从外部),你可以为它创建一个只允许自己被调用一次的setter。

否则,const是您最好的选择。