草庐IT

c++ - 使用异常的 C++ 程序是否需要在其主要函数中包含 try/catch block ?

如果异常由C++代码抛出但未被捕获,则会导致SIGABRT。有些系统只打印“Abort”,有些系统还会打印e.what()的内容。问题是:C++标准是否规定main函数中需要try/catchblock才能将程序视为行为良好的程序,还是C++只是默默地依赖系统来处理它? 最佳答案 如C++17standarddraft中所述,在第18.3.9节[except.handle]中:Ifnomatchinghandlerisfound,thefunctionstd::terminate()iscalled;whetherornotthes

C++琐碎的try-catch导致中止

下面是简单的代码//g++centro.cc-ocentro#includeusingnamespacestd;intmain(intargc,char*argv[]){try{cout产生一个中止:GoingtothrowterminatecalledwithoutanactiveexceptionAborted(coredumped)我不明白哪里出了问题,有人能指出我正确的方向吗? 最佳答案 尝试扔东西。您没有抛出任何异常。throw;本身通常用于在catchblock中重新抛出相同的异常。将结果与throw"something

c++ - 尽管 try-catch 异常仍泄漏到系统

我在继承的应用程序中有以下代码,使用VS2012针对boost1.48.0构建boolConvertToBoolean(conststd::string&s){try{returnboost::lexical_cast(s);}catch(...){if(boost::iequals("true",s.c_str())){returntrue;}}returnfalse;}如果您将“True”或“False”传递给此方法,lexical_cast将抛出一个bad_lexical_cast异常,因为它需要“0”或“1”并将评估字符串比较。这似乎在我的机器上工作正常,无论是在调试器内还是在

c++ - Catch.hpp 单元测试 : How to dynamically create test cases?

我正在使用CATCHv1.1build14对我的C++代码进行单元测试。作为测试的一部分,我想检查代码中几个模块的输出。没有固定数量的模块;可以随时添加更多模块。但是,测试每个模块的代码是相同的。因此,我认为将测试代码放在for循环中是最理想的。事实上,使用catch.hpp,我已经验证了我可以在测试用例中动态创建部分,其中每个部分对应一个模块。我可以通过将SECTION宏包含在for循环中来做到这一点,例如:#include"catch.hpp"#include#include#include"myHeader.h"TEST_CASE("Moduletesting","[module

c++ - Jenkins 测试报告分析器与 catch 的集成

我最近开始使用Jenkins自动构建我的C++项目并运行我的测试(我使用的是catch.cpp)。我想要某种测试运行时间和状态的表格,这让我找到了Jenkins的“测试结果分析器”插件。我的构建是这样运行的:您可以在控制台输出中看到它们实际运行:最后,我的测试结果分析器插件什么也没显示:插件似乎无法识别这些是我的测试。这是合理的,因为我只告诉Jenkins执行这些命令,我​​认为理解这些是要报告的测试还不够聪明。但我找不到如何告诉“测试报告分析器”它需要报告哪些测试。我的问题是如何获得插件网页中的测试表:TestsReportsAnalyzer解决方案:Jenkins需要一个测试结果的

c++ - 如果异常保存在 std::exception_ptr 中,那么在 catch 语句之外使用异常是否安全?

我有一个std::exception_ptr里面有一个异常。我将调用std::rethrow_exception来获取实际的异常,异常在catch语句之后是否有效?我的猜测是因为我仍然持有std::exception_ptr它仍然有效。看例子:std::exception_ptrePtr=initialize_somewhere_else();std::runtime_error*a=NULL;try{std::rethrow_exception(ePtr);}catch(std::runtime_error&e){a=&e;}std::coutwhat()注意:在我使用Clang的测

c++ - try 和 catch 中的对象声明未在范围内定义

我想像这样在try/catch语句中声明一个对象:try{Objectobject(value);}catch(exception){return1;}object.usingExemple();G++告诉我对象没有在范围内定义。我明白如果try接收到一个异常对象,则不会创建并且无法使用。但是g++难道不应该知道我在函数发生时离开了吗?如何在不使用new的情况下声明一个在构造函数中抛出异常的对象?提前致谢:) 最佳答案 简单:如果您的代码使用object取决于它的创建而不引发异常(确实如此,因为如果发生异常则对象不可用),那么它包含

c++ - 警告 C4673 : throwing 'ex::traced_error<EX>' the following types will not be considered at the catch site

MSVC10和MSVC9在编译我的异常框架时都生成了4级警告消息,尽管程序的行为似乎是正确的。异常框架相当庞大和复杂,但我已经设法将其归结为它的本质。这是一个完整的程序,您可以在VS10中编译和运行#include#include#include#include#includeusingnamespacestd;namespaceex{classgeneric_error:virtualpublicstd::exception{public:generic_error(intthread_id):thread_id_(thread_id){}constchar*what()constt

C++ 异常 :Throwing Arrays and getting array size in catch

普通函数(例如printArray)采用数组及其大小(2个参数)来打印数组元素。如何使用异常来做同样的事情?更确切地说,如何将数组大小传递给catch处理程序?(假设我没有在try-catch之外声明的constintSIZE)例如。//voidprintArray(int*foo,intsize);intfoo[]={16,2,77,40,12071};//printArray(foo,5);//OK,functioncallusingarrayacceptssize=5try{//dosomethingthrowfoo;}catch(int*pa){//Ihavetogetarra

ios - 根据用于 iOS 6 的地址簿使用文档,Catch 22

根据iOS6的文档,地址簿应该使用ABAddressBookCreateWithOptions创建。它还表示,如果调用者无权访问数据库,则此方法将返回null。但是,通过调用ABAddressBookRequestAccessWithCompletion来请求访问,它以ABAddressBookRef作为参数。因此根据文档,如果您没有访问权限,您首先无法获得ABAddressBookRef,但要获得访问权限,您必须将ABAddressBookRef作为参数传递。嗯。catch22?那么如何创建ABAddressBookRef呢?一直在谷歌搜索一些示例/教程代码,但没有找到。TIA