不可变成员函数和常量成员函数之间的区别是什么



D编程语言参考在Declarations和Type Qualifiers部分显示了两个例子,因此这两个例子都是可能的:

struct S
{
    int method() const
    {
        //const stuff
    }
}
struct S
{
    int method() immutable
    {
        //immutable stuff
    }
}

来自文档:

Const成员函数是不允许通过成员函数的this引用更改对象任何部分的函数。

和:

不可变成员函数保证对象和该引用所引用的任何内容都是不可变的。

我发现了这个问题,但所有的答案都是关于数据类型,而不是存储类。D const常见问题解答也是如此,尽管它是一本有趣的读物。

那么,上面两个定义之间的区别是什么呢?有没有表达式可以取代//const stuff,并且是合法的,但不能取代//immutable stuff

immutable方法只能在immutable对象上调用。他们可以保证他们的对象(this)永远不会改变。

可以对constimmutable或可变对象调用const方法。它们保证自己不会更改对象,但其他引用可能会更改对象。

除非您有充分的理由需要immutable,否则我会选择const,因为const函数可以用所有三个可变存储类调用。


*无论如何,在类型系统级别。更改不可变对象是可能的,但会导致未定义的行为。

相关内容

  • 没有找到相关文章

最新更新