调用不可变类的成员函数

时间:2012-08-08 09:00:52

标签: class d immutability member-functions

immutable class Foo
{
    void bar()
    {
    }
}

void main()
{
    auto x = new Foo();
    x.bar();
    // Error: function test.Foo.bar () immutable is not callable
    //         using argument types ()
}

我需要在程序中更改以便x.bar()编译? x类型错误吗?

1 个答案:

答案 0 :(得分:4)

看起来像个错误。 {(1}}被推断为具有类型x,虽然它是一个不可变类,但它被视为一个可变变量,导致Foo失败,因为x.bar()是一个不可变的方法。

解决方法是提供一个空的不可变构造函数,

bar()

导致immutable class Foo { void bar() { } immutable this() {} // <--- } 表达式返回new Foo()