3

D 编程语言参考在声明类型限定符部分显示了两个示例,因此这些都是可能的:

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

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

从文档:

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

和:

不可变成员函数保证 this 引用所引用的对象和任何东西都是不可变的。

我找到了这个问题,但所有的答案都是关于数据类型,而不是存储类。D const FAQ也是如此,尽管它读起来很有趣。

那么上面的两个定义有什么区别呢?是否有可以替代//const stuff且合法但不合法的表达式//immutable stuff

4

1 回答 1

7

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

const可以在 、 或可变对象上调用const方法immutable。他们保证他们自己不会改变他们的对象,但是其他的引用可能会改变这个对象。

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


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

于 2016-04-19T22:35:06.310 回答