D类不变调用const函数

时间:2011-12-29 14:00:28

标签: d invariants

为什么以下引发编译器错误:

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

我理解不变的概念;你想检查每次公开调用方法之间的类状态。

但是,不可变或const成员函数不能改变类的状态(除非传递this?),因此围绕这些函数的不变检查是多余的。可以将不变调用放在一边,不会出现无限循环,导致编译错误。


我来到这里,因为我创建了带有对象的层次结构,它定义了:

bool hasParent() const
{
    return (parent !is null);
}

在课堂上使用这个小功能更容易,但也可能在外面。但是定义它公开违反了不变()。

1 个答案:

答案 0 :(得分:1)

这很可能是遗漏。您可以在Bugzilla上提交增强请求。