D编程语言参考在Declarations和Type 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
的表达式?
答案 0 :(得分:7)
immutable
方法只能在immutable
个对象上调用。他们可以保证*他们的对象(this
)永远不会改变。
const
,const
或可变对象上调用 immutable
个方法。他们保证他们自己不会改变他们的对象,但其他参考可能会改变对象。
除非您有充分的理由需要const
,否则我会选择immutable
,因为const
函数可以使用所有三个可变存储类进行调用。
*无论如何,在类型系统级别。可以改变不可变对象,但会导致未定义的行为。