【问题标题】:What is the difference between immutable and const member functions?不可变成员函数和 const 成员函数有什么区别?
【发布时间】:2016-04-19 22:24:01
【问题描述】:

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

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

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

来自文档:

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

还有:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2011-06-04
      • 2023-03-14
      相关资源
      最近更新 更多