7

やってみて分かった

struct PropertyTest
{
    @property int x() { return val; }
    @property void x( int newVal ) { val = newVal; }

    void test()
    {
        int j;
        j = x;
        x = 5;
    }

private:
    int val;
}

アウトのままにすると、まったく同じことが行わ@propertyれます。すべてが正常にコンパイルされます。それでは、関数を として宣言するポイントは何@propertyですか?

ところで、dmd2 コンパイラを使用しています。

4

2 に答える 2

9

それらがなくても動作する理由は、プロパティ メソッドの構文を許可した後に追加された@propertyためです。DMD コマンド ラインに@property追加すると、注釈の使用が強制されます。下位互換性の理由から、これはデフォルトではありません。いつかそれがデフォルトになる (または彼らが言うように) ので、適切に注釈を付けていることを確認するためにコンパイルするのが最善です。-property@property-property

于 2012-08-23T16:05:29.267 に答える
1

これにより、括弧なしで引数なしのメソッドを使用でき (変数の読み取りなど)、変数に代入する方法で、括弧なしで単一引数のメソッドを呼び出すことができます。

@property int foo() { ... }
@property void bar(int x) { ... }

void main()
{
    bar = foo;
}

-propertyコンパイラのコマンド ライン オプションとして指定する必要があります。

于 2012-08-23T15:37:15.247 に答える