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
)永远不会改变。
可以对const
、immutable
或可变对象调用const
方法。它们保证自己不会更改对象,但其他引用可能会更改对象。
除非您有充分的理由需要immutable
,否则我会选择const
,因为const
函数可以用所有三个可变存储类调用。
*无论如何,在类型系统级别。更改不可变对象是可能的,但会导致未定义的行为。