草庐IT

throw-catch

全部标签

c++ - 使用 Visual Studio 2010 的 CATCH 单元测试套件

据我了解,我可以简单地将catch.hpp放入我的项目目录,将其添加到项目中,然后开始编写测试。当我尝试使用tutorial中列出的一些宏时,我遇到了一些(准确地说是11个)链接器错误。.#include"catch.hpp"unsignedintFactorial(unsignedintnumber){returnnumber我能够从第一个示例中创建一个文件并使用g++对其进行编译,但是当我将相同的代码粘贴到我的VS2010项目中然后尝试运行它时,我遇到了链接器错误。不幸的是,此时我对C++还不够熟悉,无法自己解码错误,在查看单个文件后here,我无法辨别问题。Error1error

c++ - 如何使用 BOOST_THROW_EXCEPTION?

如何使用BOOST_THROW_EXCEPTION宏?什么作为参数?我不知道,我似乎找不到任何可读的例子。 最佳答案 您只需将一个异常对象传递给它:BOOST_THROW_EXCEPTION(std::range_error("Indexoutofrange"));它将包装异常以使其派生自类boost::exception(如果它还不是它的子级),并添加源文件和行等信息。Boost.ExceptionFAQ对优势和使用示例有很好的见解。 关于c++-如何使用BOOST_THROW_EXC

c++ - 有没有 catch(...) 可以处理而 catch(exception& ex) 不能处理的异常?

我搜索了很多关于这两种类型的处理程序之间的区别,但每个人都说catch(...)是一个通用的处理程序,可以捕获所有内容。我找不到其中一个可以处理而另一个不能处理的异常。即使除以零,也会产生它们都无法处理的异常(浮点异常)。任何人都可以给我一个样本并清楚地解释它们的区别吗?我应该使用其中的哪一个? 最佳答案 Isthereanyexceptionthatcatch(...)canhandlewhilecatch(exception&ex)cannot?是的,任何不是std::exception或不是派生自std::exception的

c++ - 使用 C++ Catch 测试浮点 std::vector

CatchC++单元测试框架是否有可能比较基于浮点类型的std::vectors?我知道我可以比较两个容器和每个元素的大小(使用Approx),但这很麻烦。整数类型vector的比较工作正常。现在,我必须使用这样的结构REQUIRE(computed.size()==expected.size());for(size_ti=0;i但我想使用一个衬里(它适用于整数类型):REQUIRE(computed==expected); 最佳答案 下面的构造由Catch2自己提供。无需自己动手。REQUIRE_THAT(computed,Cat

c++ - 编译器如何知道使用哪个 catch block ?

假设我有以下两个文件,main.cpp:#includeclassA{};voidfoo();intmain(void){try{foo();}catch(constA&e){std::cout和foo.cpp:classA{};classB:publicA{};voidfoo(){Bb;throwb;}现在,当我分别编译这些文件中的每一个、链接生成的目标文件并运行生成的可执行文件时,我得到了预期的结果:$clang++--std=c++14-cmain.cpp$clang++--std=c++14-cfoo.cpp$clang++--std=c++14main.ofoo.o$./a.

c++ - 使用 try-Catch 异常处理程序和 if else 条件检查之间的区别?

这个问题在这里已经有了答案:IsthereageneralconsensusintheC++communityonwhenexceptionsshouldbeused?[closed](11个答案)关闭9年前。我在很多地方都使用过if...else语句,但是我对异常处理还是陌生的。这两者的主要区别是什么?例如:int*ptr=new(nothrow)int[1000];if(ptr==NULL){//Handleerrorcaseshere...}或try{int*myarray=newint[1000];}catch(exception&e){cout所以我们在这里使用标准异常类,它

c++ - catch 语句中可以发生复制省略吗?

考虑一个带有带有副作用的复制构造函数的异常类。编译器能否在此处跳过调用复制构造函数:try{throwugly_exception();}catch(ugly_exception)//ignoringtheexception,soI'mnotnamingit{}这个怎么样:try{something_that_throws_ugly_exception();}catch(ugly_exception)//ignoringtheexception,soI'mnotnamingit{}(是的,我知道这一切都很丑陋,这是受anotherquestion启发的) 最

c++ - 为什么 try...catch 需要抛出 EXACT 类型

我可以做到,没问题:longlngval=3L;inti=lngval;但如果我尝试这样做:try{throw3L;}catch(inti){cout我得到一个未处理的异常。这似乎不一致。这种情况下没有类型转换的原因是什么? 最佳答案 在第一种情况下,编译器可以准确地告诉您要做什么:将long转换为int。在第二种情况下,编译器必须假设您可能有这样的构造:try{try{throw3L;}catch(inti){/*P*/}}catch(longl){/*Q*/}这个想法是编译器永远不知道是否有一个catch(longl)潜伏在当前

c++ - 获取有关 catch block 内何处抛出 C++ 异常的信息?

我有一个C++应用程序,它将大部分代码包装在tryblock中。当我捕捉到异常时,我可以将用户返回到稳定状态,这很好。但我不再收到故障转储。我真的很想弄清楚异常发生在代码中的什么位置,这样我就可以记录并修复它。能够在不停止应用程序的情况下进行转储是最理想的,但我不确定这是否可能。有什么方法可以找出异常从catchblock中抛出的位置吗?如果它有用,我在windowsxp和更高版本上使用nativemsvc++。我的计划是简单地将崩溃记录到各个用户计算机上的文件中,然后在崩溃日志达到一定大小后上传。 最佳答案 这可以通过使用SEH(

c++ - 我们应该为析构函数提供 no-throw 说明符吗?

namespaceQuantLib{//!BaseerrorclassclassError:publicstd::exception{public:/*!Theexplicituseofthisconstructorisnotadvised.UsetheQL_FAILmacroinstead.*/Error(conststd::string&file,longline,conststd::string&functionName,conststd::string&message="");/*!theautomaticallygenerateddestructorwouldnothavet