草庐IT

try-catch-else

全部标签

c++ - if/else 在 C++ 的编译时?

考虑以下代码:#include#includetemplateclassMyClass{public:MyClass():myVar{0}{;}voidtestIf(){if(isconst){myVar;}else{myVar=3;}}voidtestTernary(){(isconst)?(myVar):(myVar=3);}protected:staticconstboolisconst=std::is_const::value;TmyVar;};intmain(){MyClassx;MyClassy;x.testIf();x.testTernary();y.testIf();/

c++ - 将数组本地抛出到 try block

来自C++Primer18.1.1:Ifthe[thrown]expressionhasanarrayorfunctiontype,theexpressionisconvertedtoitscorrespondingpointertype.这个程序怎么能正确输出9876543210(g++5.2.0)?#includeusingnamespacestd;intmain(){try{inta[10]={9,8,7,6,5,4,3,2,1,0};throwa;}catch(int*b){for(inti=0;i从引用中,throwa将创建一个类型为int*的异常对象,它是指向数组第一个元素

c++ - 从 catch(...) 捕获的异常中获取一些信息?

这个问题在这里已经有了答案:Isthereanywaytogetsomeinformationatleastforcatch(...)?(5个回答)关闭7年前。我有一个trycatch子句,其中最外面的catch(...)直到现在才发生。在进行了一些更改之后,在某个地方抛出了我在其他情况下无法处理的异常。即使我用(...)捕获它,有没有办法至少获取一些关于异常的信息?catch(constcone::BeginnersLibException&ex){//handletheexception}catch(conststd::exception&ex){//handlestdexcept

c++ - 从 catch block 中获取回溯

我正在使用backtrace从引发异常的位置获取信息。在我的异常的构造函数中,我将回溯存储在std::string中,在这种类型的异常的catchblock中,我正在打印这个回溯。但我想知道,是否有可能以某种方式在catchblock中为其他异常类型获得相同的回溯? 最佳答案 您可能对正在开发的Boost库感兴趣:PortableBacktrace.示例:#include#includeintfoo(){throwboost::runtime_error("MyError");return10;}intbar(){returnfoo

c++ - C++ 中 try/catch block 的使用

一般来说,我倾向于将try/catch用于具有多个故障点的代码,这些故障点有一个共同的处理程序。根据我的经验,这通常是在执行某些操作之前限定输入或上下文的代码,或者在执行某些操作之后限定输出。我已从文献和同事那里得到建议,以尽量减少此类代码块中的代码,我接受这通常是好的建议。我想进一步了解上述建议的基础:开销的性质是什么?最近是否有针对try/catchblock的推荐使用(或避免使用)的开发指南?更快的处理器和更现代的编译器在多大程度上缓解了try/catch的问题?提前感谢您的帮助,AJ 最佳答案 在c++中,成本取决于实现。一

MSVC x64 中的 C++ 异常 "Skips"Try-Catch 子句

我正在用C++编写程序。该程序在Win32(x86)上运行良好,最近我尝试为x64本地编译它。当然,事情并没有立即奏效。调试问题后,我设法用这个简单的代码片段重现了它:classMyException{};intmain(){try{for(;;){try{std::cout(我将很快解释if(1==0)子句)使用MSVCforx86编译此代码时(我使用的是2010),结果符合预期:ThrowingCatch1ThrowingCatch1ThrowingCatch1ThrowingCatch1...以此类推,无限循环。但是,为x64编译此代码会导致:ThrowingCatch2Done

c++ - 如果我不 catch 会怎样?

这是super基本的,但我无法在任何地方找到答案。有很多关于throw和捕捉的帖子,但是如果我从function1throw然后从function2调用function1会发生什么但不捕获它,这是否意味着它只是被重新抛出给function2的调用者?从以下内容来看,我会说是的,但我想在我坚持下去之前得到一个可靠的大师般的答案并假设:#includevoidfunction1(){throw1;}voidfunction2(){function1();}intmain(){try{function2();}catch(...){std::cout输出:抓到了!

c++ - 没有花括号的 "if" block 使后续的 "else if"嵌套

AFAIK,如果没有提供“if”block,则花括号内只考虑1个语句。例如if(..)statement_1;statement_2;不考虑选项卡,在ifblock内只考虑statement_1。以下代码与此不符:intmain(){if(false)//outer-ifif(false)//nested-ifcout上面的代码不打印任何东西。它应该打印出"true"。它显示为elseif自动嵌套在outerifblock内。g++-Wall发出警告,但这不是这里的问题。放置花括号后,一切都会按预期进行。为什么会有如此不同的行为?[GCC演示:withoutbraces和withbra

c++ - if/else 在什么阶段变得比 switch case 更好?可以?

我可以总结一下,Switchcase由实现定义,但主要定义为跳转表切换大小写使代码更具可读性Switch比if/elseif(?)快考虑一个我有300+个switch案例的案例。我知道这个场景中的if/elseif会一团糟。但我想知道switch案例在这样的场景?它是否可扩展,即无论存在多少情况,它仍然比if/else相对快?既然是执行定义了我如何弄清楚我的编译器是如何实现它的?最重要的是,除了实际编写代码和使用分析器之外,我该如何进行if/elseif-switch比较?我尝试使用gcc4.8.1-S开关编译一个带有switchcase的小型.c文件,它看起来像是创建了一个跳转表.我

c++ - 在嵌套的 'try' 中重新抛出异常是否合法?

以下是否在C++中定义明确?我被迫将异常“转换”为返回代码(许多C用户使用相关API,因此我需要确保在将控制权返回给调用者之前捕获并处理所有C++异常)。enumErrorCode{…};ErrorCodedispatcher(){try{throw;}catch(std::bad_alloc&){returnErrorCode_OutOfMemory;}catch(std::logic_error&){returnErrorCode_LogicError;}catch(myownstdexcderivedclass&){returnErrorCode_42;}catch(...){r