我是一名学生,我正在尝试编写并运行一些测试代码,以便在调用之前检查它。我现在想要做的是测试我的代码正确地阻止了值语义。在我的任务中,我已经为我的每个类声明了自己的专用复制构造函数和赋值运算符,它们没有定义,因此什么都不做。当他们在我的测试程序中被调用时,我得到了像我预期的编译错误。事情是这样的:编译错误的C++测试
error: 'myClass::myClass(const &myClass)' is private'
error: 'myClass& myClass::operator=(const myClass&)' is private
是否有使用try/catch语句,这样我的测试代码编译和运行,但告诉我,这些错误确实发生的方法吗? 我已经试过:
myClass obj1(...);
myClass obj2(...);
try{
obj1 = obj2;
throw 1;
}
catch(int e){
assert(e==1);
}
但是编译器仍然给我上述错误。这些不是'例外'吗?他们会不会引发一次投掷?
如果我正确理解try/catch,它会处理运行时错误,而不是我上面得到的那种错误,对吗?
在做了一些更多的研究之后,似乎没有(简单的)在C++中本地测试某些编译错误的方法(对于大多数语言来说,现在我认为它可能是这样)。我读了post,建议用脚本语言编写一些测试代码,尝试编译C++代码片段并检查是否有任何错误,另一个建议使用Boost.Build的post。
做什么我想要做什么是最简单/最好的方式?
我看了看Boost.Build的文档,它有点凌驾于我的头上。如果我使用它,我将如何测试一个文件,比如'test.cpp'编译,并且可能处理'test.cpp'发生的特定编译错误?
感谢您的帮助!
P.S.这是我的第一篇文章之一,希望我已经做了“足够”的研究,并且正确地完成了一切。对不起,如果我没有。
只要您编译程序,你会得到一个错误列表。这还不够?!如果你添加一个测试类,那就不能从你的代码中提取更多的“编译错误”。测试类被写入(编译后)运行代码并提取语义错误。 – Shahbaz 2012-03-29 09:25:27
在这种情况下,我只需要进行一些我想测试的操作,但仔细阅读编译错误并不是什么大不了的事情。但是当你在一个大项目上工作时,会发生什么情况,并且有很多您想要防止的操作/行为,您想要产生编译错误的操作/行为?手动阅读并检查每一个看起来不仅有点乏味。 – 2012-03-29 15:52:59
等待,您不能为运行时操作/行为“产生编译错误”。编译器读取您的代码,确保它符合C++语言,从词汇,语法和语义上都符合C++语言,并为其生成代码。它只检查C++语言指定的内容。如果生成的代码不起作用,那与编译器无关(所以它不能给你编译错误) – Shahbaz 2012-03-29 16:07:47