草庐IT

try-catch-else

全部标签

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++ - if-else 取决于 T 是否为完整类型

如何在某个.cpp中判断某个类型是否为完整类型?templateclassTest{//somefieldsvoid(*functor)(T*)=[](T*){};//^willbewrittenbysome.cppthatcanaccessTascomplete-typeT*t=nullptr;voidfComplete(){deletet;//faster/**^somecodethatusecompletetype*/}voidfForward(){functor(t);//slower/**^somecodethatforwarddeclarationisenough*/}vo

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++ - 使用条件 if else 运算符初始化引用变量

以下C++无效,因为引用变量需要初始化器:int&a;//illegalif(isfive){a=5;}else{a=4;}但是,MSVC似乎认为这样没问题:int&a=isfive?5:4;这对我来说意味着MSVC实际上将条件运算符视为单个表达式,而不是将其扩展为if-else语句。使用条件运算符初始化引用是否总是有效的C++? 最佳答案 三元运算符不会扩展为if-else结构(不是根据语言,实现可能会生成等效的二进制文件,但在语言级别它们是不同的)。所以下面的代码是有效的:intfour=4,five=5;int&r=condi

c++ - 查找表与 if-else

今天,我阅读代码时使用查找表而不是if-else来裁剪两个求和的uint8值。映射在i={0...255}中为i,在i={256...511}中为255。我想知道这样做的yield有多大,并尝试使用gprof找出它,g++-std=c++0x-pgperfLookup.cpp-O2-operfLookup&&./perfLookup&&gprofperfLookup|less下面附上代码。现在没有-O2标志,gprof表示lookup()占用执行时间的45%,而ifelse()占用执行时间的48%。对于-O2,lookup()为56%,ifelse()为43%。但这个基准真的正确吗?也