为什么以下引发编译器错误:
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);
}
在课堂上使用这个小功能更容易,但也可能在外面。但是定义它公开违反了不变()。