我是一名学生,我正在尝试编写和运行一些测试代码以在我上交之前检查它的分配。我现在要做的是测试我的代码是否正确地防止了值语义。在我的作业中,我为每个类声明了自己的私有复制构造函数和赋值运算符,它们没有定义,所以什么也不做。当他们在我的测试程序中被调用时,我得到了我预期的编译错误。像这样的东西:
错误:'myClass::myClass(const &myClass)' 是私有的'
错误:'myClass& myClass::operator=(const myClass&)' 是私有的
有没有办法使用 try/catch 以便我的测试代码能够编译和运行,但告诉我这些错误确实发生了?我试过了:
myClass obj1(...);
myClass obj2(...);
try{
obj1 = obj2;
throw 1;
}
catch(int e){
assert(e==1);
}
但编译器仍然给我上述错误。这些不是“例外”吗?他们不会触发投掷吗?
如果我正确理解了 try/catch,它会处理运行时错误,而不是我上面遇到的那种错误,对吗?
在做了更多的研究之后,似乎没有(简单的)方法可以在 C++ 中本地测试某些编译错误(这对于大多数语言来说可能是正确的,现在我考虑了一下)。我读过一篇文章建议用脚本语言编写一些测试代码,尝试编译 C++ 代码片段并检查是否有任何错误,以及另一篇建议使用 Boost.Build 的文章。
做我想做的事情的最简单/最好的方法是什么?
我查看了 Boost.Build 的文档,这有点超出我的想象。如果我使用它,我将如何测试一个文件,比如“test.cpp”编译,并可能处理“test.cpp”发生的特定编译错误?
谢谢你的帮助!
PS 这是我的第一篇文章,希望我已经做了“足够”的研究,并正确地完成了其他所有工作。对不起,如果我没有。