【问题标题】:C# readonly in C++ (subtle differences to const)C# 在 C++ 中只读(与 const 的细微差别)
【发布时间】:2012-11-01 23:17:02
【问题描述】:

有很多关于 C# 中 readonly 的 C++ 等价物提到 const 的问题。但是,到目前为止,据我所知,我没有发现实际上是正确的,甚至没有提到我在这里所追求的细节。

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

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

【问题讨论】:

    标签: c# c++ constructor constants readonly


    【解决方案1】:

    是的,使用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 搞混了。)
    【解决方案2】:

    不是真的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2016-11-03
      • 2011-04-26
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多