immutable和const成员函数之间有什么区别?

时间:2016-04-19 22:24:01

标签: const d immutability member-functions storage-class-specifier

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

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

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

来自文档:

  

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

  

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

我找到了this question,但所有的答案都是关于数据类型,而不是存储类。同样适用于D const FAQ,即使它是一个有趣的读物。

那么上面两个定义之间有什么区别?是否有可以替换//const stuff并且合法而非//immutable stuff的表达式?

1 个答案:

答案 0 :(得分:7)

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

可以在constconst或可变对象上调用

immutable个方法。他们保证他们自己不会改变他们的对象,但其他参考可能会改变对象。

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

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