3

D プログラミング言語リファレンスでは、宣言型修飾子のセクションに 2 つの例が示されているため、どちらも可能です。

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

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

ドキュメントから:

const メンバー関数は、メンバー関数の this 参照を通じてオブジェクトのどの部分も変更できない関数です。

と:

不変メンバー関数は、オブジェクトと this 参照によって参照されるものはすべて不変であることが保証されています。

私はこの質問を見つけましたが、すべての回答はストレージ クラスではなく、データ型に関するものです。同じことがD const FAQにも当てはまりますが、興味深い読み物です。

では、上記の 2 つの定義の違いは何でしょうか? //const stuffを置き換えて合法であるがそうではない表現はあり//immutable stuffますか?

4

1 に答える 1

7

immutableメソッドはオブジェクトでのみ呼び出すことができimmutableます。彼らは、オブジェクト ( this) が決して変更されないという保証*で作業できます。

constメソッドはconst、 、immutable、または可変オブジェクトで呼び出すことができます。それら自体はオブジェクトを変更しないことを保証しますが、他の参照がオブジェクトを変更する可能性があります。

関数は 3 つの可変ストレージ クラスすべてで呼び出し可能でconstあるため、必要とする正当な理由がない限り、immutable私は使用します。const


* とにかく型システムレベルで。不変オブジェクトの変更は可能ですが、未定義の動作が発生します。

于 2016-04-19T22:35:06.310 に答える