在 C++ 中正确使用 assert()
Proper use of assert() in c++
我的教授给了我们一个练习,我们必须决定什么时候使用 assert(check_inv()) 是合适的,该 assert(check_inv()) 使对象保持在符合 class 不变式的状态.
我不确定什么时候需要检查 class 不变量,我知道在从他的构造函数返回对象之前检查 class 不变量是一个很好的做法,但是如果其他功能我不完全确定。
这是考试内容:
class C
{
public:
bool check_inv() const
{
// Implementation of class invariant code
}
C(int a, int b)
{
// Implementation of class constructor.
}
void foo(C& y)
{
// Implementation of method foo.
}
void bar(const C& y)
{
// Implementation of method bar.
}
void ying(const C& y)
{
// Implementation of method ying.
}
void yang(const C& y) const
{
// Implementation of method yang.
}
~C()
{
// Implementation of class destructor.
}
static void zen(int i, double d)
{
//Implementation of method zen.
}
// ... Some other code ...
}; // class C
我应该在哪里检查 class 不变量?
编辑:这根本不应该是家庭作业问题,我只需要通过一个例子来理解断言的功能。
可能你应该检查除析构函数之外的所有其他 public class 成员函数中的 class 不变量 function.And 你应该检查两次,首先是在进入函数之后,然后在退出函数之前,在这两个过程之间,你可以做一些不变量。
想想对象的生命周期:它由构造函数创建,由 const
成员函数检查,由非 const
成员函数修改,最后它被它的析构函数销毁。因此,就 class 不变量而言,它必须在构造函数的末尾和任何非 const
成员函数的末尾得到满足。这足以确保不变量在任何地方都得到满足。在进入函数时检查它不会使 class 健壮;它可能会检测到来自外部的覆盖,但这不是 class 呈现的抽象的一部分。所以:检查每个构造函数末尾和每个非const
成员函数末尾的不变量。
我的教授给了我们一个练习,我们必须决定什么时候使用 assert(check_inv()) 是合适的,该 assert(check_inv()) 使对象保持在符合 class 不变式的状态.
我不确定什么时候需要检查 class 不变量,我知道在从他的构造函数返回对象之前检查 class 不变量是一个很好的做法,但是如果其他功能我不完全确定。
这是考试内容:
class C
{
public:
bool check_inv() const
{
// Implementation of class invariant code
}
C(int a, int b)
{
// Implementation of class constructor.
}
void foo(C& y)
{
// Implementation of method foo.
}
void bar(const C& y)
{
// Implementation of method bar.
}
void ying(const C& y)
{
// Implementation of method ying.
}
void yang(const C& y) const
{
// Implementation of method yang.
}
~C()
{
// Implementation of class destructor.
}
static void zen(int i, double d)
{
//Implementation of method zen.
}
// ... Some other code ...
}; // class C
我应该在哪里检查 class 不变量?
编辑:这根本不应该是家庭作业问题,我只需要通过一个例子来理解断言的功能。
可能你应该检查除析构函数之外的所有其他 public class 成员函数中的 class 不变量 function.And 你应该检查两次,首先是在进入函数之后,然后在退出函数之前,在这两个过程之间,你可以做一些不变量。
想想对象的生命周期:它由构造函数创建,由 const
成员函数检查,由非 const
成员函数修改,最后它被它的析构函数销毁。因此,就 class 不变量而言,它必须在构造函数的末尾和任何非 const
成员函数的末尾得到满足。这足以确保不变量在任何地方都得到满足。在进入函数时检查它不会使 class 健壮;它可能会检测到来自外部的覆盖,但这不是 class 呈现的抽象的一部分。所以:检查每个构造函数末尾和每个非const
成员函数末尾的不变量。