2
なぜ次投げるコンパイラエラー:Dクラス不変呼び出しconstが機能
class A
{
public:
int f() const
{
return 5;
}
protected:
invariant()
{
assert (f() == 5);
}
}
main.d(14): Error: cannot call public/export function f from invariant
。
私は不変式の概念を理解しています。メソッドへのすべてのpublic呼び出しの間にクラスの状態をチェックしたいとします。
しかし、不変またはconstメンバ関数は、(this
が渡された場合を除いて)クラスの状態を変更することはできません。したがって、これらの関数の不変チェックは冗長です。不変の呼び出しは無視され、無限ループは現れず、コンパイラー・エラーを誤ってキャストします。
私が定義するオブジェクトと階層を作成するので、私はこれに来た:
bool hasParent() const
{
return (parent !is null);
}
この小さな機能を使用すると、あまりにもクラス内のより容易な、しかしおそらく外です。しかし、それを公に定義することは不変()を無視する。
投稿:http://d.puremagic.com/issues/show_bug.cgi?id=7182#c0 –