草庐IT

try-catch-rethrow

全部标签

c++ - try_lock_for 未按预期工作

我正在摆弄一些C++中的代码,由于某种原因不想工作,我将它缩小到这种情况:#include#include#include#include#includeusingnamespacestd;voidtest(){timed_mutexm;m.lock();std::cout问题是test()根本不会阻塞,即使try_lock返回false。有没有我忽略的东西,或者这是gcc中的错误,或者我接下来应该去哪里找出问题所在?感谢任何建议和帮助!我像这样编译了这个小程序:g++-pthread-std=c++11threads.cpp-othreads如果有任何帮助,这是gcc和我的操作系统的

c++ - rethrow_exception 真的可以抛出相同的异常对象,而不是一个拷贝吗?

在检查exception_ptr的作用时,C++11标准指出(18.8.5/7):Useofrethrow_exceptiononexception_ptrobjectsthatrefertothesameexceptionobjectshallnotintroduceadatarace.[Note:ifrethrow_exceptionrethrowsthesameexceptionobject(ratherthanacopy),concurrentaccesstothatrethrownexceptionobjectmayintroduceadatarace...我没有发现这个奇怪

c++ - catch 站点异常的常见用法是什么?

我对异常处理的理解非常有限。虽然我发现抛出异常很容易(或者我可以使用expected打包它供以后使用),但我对如何处理异常知之甚少。目前我的知识仅限于清理我自己的资源并在适当的位置重新抛出要处理的异常。例如ptrp=alloc.allocate(n);try{uninitialized_copy(first,last,p);//atomicgranularity,allornone}catch(...){alloc.deallocate(p,n);throw;}但我想,这可以等效地转换为RAII模式为alloc_guardp{alloc.allocate(n)};uninitializ

c++ - TRY/CATCH_ALL 与 try/catch

我使用C++有一段时间了,对普通的try/catch很熟悉。但是,我现在发现自己在Windows上,在VisualStudio中编码以进行COM开发。代码的几个部分使用了如下内容:TRY{...dostuff}CATCH_ALL(e){...issueawarning}END_CATCH_ALL;这些宏有什么意义?与内置的try/catch相比,它们有什么好处?我试过用谷歌搜索这个,但是很难搜索到“tryvsTRY”。 最佳答案 这是一个MFC宏:http://msdn.microsoft.com/en-us/library/t8d

c++ - "if constexpr"与 "try in constexpr function"警告交互

我声称thisprogram应该是合式的:它声明了S的constexpr成员函数.但是,GCC和Clang都拒绝这个程序。templatestructS{constexprintfoo(){ifconstexpr(std::is_same_v){return0;}else{try{}catch(...){}return1;}}};intmain(){Ss;returns.foo();//expect"return0"}海湾合作委员会说:error:'try'in'constexpr'functionclang说:error:statementnotallowedinconstexprf

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

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

c++ - 调试断言失败表达式 : _pFirstBlock == pHead using OpenCV and C++ trying to call SurfFeatureDetector

我在使用OpenCV的C++中有这个函数:vectortest(Matimg){intminHessian=400;SurfFeatureDetectordetector(minHessian);vectorvKeypoints;detector.detect(img,vKeypoints);returnvKeypoints;}当我在主方法中调用此函数时,一切正常。intmain(int,char**argv){//pathtoaimage-filechar*input="image.jpg";//readimageintoMatimgMatimg=imread(input,CV_LO

c++ - 将 VC++ 的 __try/__except EXCEPTION_STACK_OVERFLOW 移植到 MinGW

我正在尝试使用VC++的try-except语句将一些代码移植到MinGW:boolsuccess=true;__try{//...}__except((EXCEPTION_STACK_OVERFLOW==GetExceptionCode())?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH){success=false;_resetstkoflw();}returnsuccess;是否可以使用MinGWg++编写捕获堆栈溢出异常的代码? 最佳答案 您需要手动调用注册异常处理的

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