草庐IT

c++ - 在 C++ 中,使用异常和 try/catch 而不是仅仅返回错误代码有什么好处?

我已经编写C和C++很长时间了,到目前为止,我从未使用过异常和try/catch。使用它而不是让函数返回错误代码有什么好处? 最佳答案 可能很明显的一点-开发人员可以忽略(或不知道)您的返回状态并继续幸福地不知道发生了什么事。需要以某种方式确认异常-如果不主动采取措施,就不能默默地忽略它。 关于c++-在C++中,使用异常和try/catch而不是仅仅返回错误代码有什么好处?,我们在StackOverflow上找到一个类似的问题: https://stacko

c++ - 如何释放 try-catch block 中的内存?

我希望有一个简单的问题-当异常发生时,如何在tryblock中分配一个空闲内存?考虑以下代码:try{char*heap=newchar[50];//letexceptionoccurheredelete[]heap;}catch(...){cout如何在分配堆后释放内存并在调用delete[]heap之前发生异常?是否有规则不在这些try..catchblock中分配堆内存? 最佳答案 学习RAII习语(资源获取就是初始化)!参见例如WikipediaarticleonRAII.RAII只是一般概念。它被用于例如在C++标准库的s

c++ - __try/__except block 或 try/catch block 哪个更好用?

我想知道捕获我抛出的异常的更好方法是:它是__try/__exceptblock还是try/catchblock?我是用C++编写的,该程序只能在Windows上使用,所以可移植性不是问题。谢谢! 最佳答案 它们是两个非常不同的东西。try/catch是您熟悉的C++关键字。__try/__except用于捕获SEH异常。Windows本身引发的异常,例如DivisionByZero或AccessViolation。MSDNLibraryarticle中有详细描述。为它。您还可以使用它来捕获C++异常,因为它利用了WindowsSE

c++ - 如何在 Catch 框架中使用浮点容差?

我正在使用Catch测试框架。在introductoryblogpost作者提到了以下特点:Floatingpointtolerancessupportedinaneasytouseway我找不到任何有关如何执行此操作的文档。这在Catch中是如何完成的? 最佳答案 这很简单。有一个类叫Approx这使您可以以非常易读的方式进行此测试:#includeTEST_CASE("demo/approx","Approxdemo"){doublea=1.0;doubleb=a+std::numeric_limits::epsilon();R

C++ : Catch a divide by zero error

这是一段简单的代码,其中发生了被零除。我试图捕获它:#includeintmain(intargc,char*argv[]){intDividend=10;intDivisor=0;try{std::cout但应用程序无论如何都会崩溃(即使我设置了MinGW的选项-fexceptions)。是否有可能捕捉到这样的异常(我理解的不是C++异常,而是FPU异常)?我知道我可以检查除数before除数,但我假设,因为除以零很少见(至少在我的应用程序中),它会更多尝试除法(并在发生错误时捕获错误)比在除法之前每次测试除数时有效。我正在一台WindowsXP计算机上进行这些测试,但希望让它跨平台

c++ - try-catch block 是否会降低性能

这个问题在这里已经有了答案:InwhatwaysdoC++exceptionsslowdowncodewhentherearenoexceptionsthown?(6个回答)关闭9年前。这个link国家,Tocatchexceptionswemustplaceaportionofcodeunderexceptioninspection.Thisisdonebyenclosingthatportionofcodeinatryblock.Whenanexceptionalcircumstanceariseswithinthatblock,anexceptionisthrownthattra

c++ - 新 (std::nothrow) 与 try/catch block 中的新

我在学习new之后做了一些研究,不像我习惯的malloc(),分配失败时不会返回NULL,发现有两种不同的方式检查new是否成功。这两种方式是:try{ptr=newint[1024];}catch(std::bad_alloc&exc){assert();};和ptr=new(std::nothrow)int[1024];if(ptr==NULL)assert();我相信这两种方法可以实现相同的目标,(当然,如果我错了,请纠正我!),所以我的问题是:这是检查new是否成功的更好选择,完全基于可读性、可维护性和性能,同时忽略事实上的c++编程约定。 最佳答案

c++ - 为什么 Try-Catch block 会影响封闭范围内的变量?

为什么外层的temp在捕捉到第一个异常后会变空?#includeintmain(){std::stringtemp("exception");intvalue;while(std::cin>>value&&value!=0){try{if(value>9)throwtemp;elsestd::cout输入:121113输出:12exception//PrintingEmptystring预期输出:12exceptionexception我用g++7.3.0编译我的代码。 最佳答案 这似乎是GCC的复制省略实现中的一个错误。C++标准

c# - 没有catch block 的finally block 是java反模式吗?

在对一些看起来像这样的代码进行故障排除时,我遇到了非常痛苦的故障排除经验:try{doSomeStuff()doMore()}finally{doSomeOtherStuff()}问题很难解决,因为doSomeStuff()引发了异常,这反过来又导致doSomeOtherStuff()也引发了异常。第二个异常(由finallyblock抛出)被抛出到我的代码中,但它没有处理第一个异常(从doSomeStuff()抛出),这是问题的真正根本原因。如果代码是这样说的,问题就会很明显:​​try{doSomeStuff()doMore()}catch(Exceptione){log.erro

exception - Go vs. 中的 panic recover try catch 用其他语言

我刚刚阅读了thispost关于Go中的panic/recover,我不清楚这与其他主流语言中的try/catch有何不同。 最佳答案 panic/recover是功能范围的。这就像说每个函数中只允许一个try/catchblock,并且try必须覆盖整个函数。这使得以与java/python/c#等使用异常相同的方式使用Panic/Recover非常烦人。这是故意的。这也鼓励人们以设计使用的方式使用Panic/Recover。您应该从panic()中恢复(),然后将错误值返回给调用者。