草庐IT

try-Catch

全部标签

c++ - 在 catch block 中抛出异常会导致两个异常同时发生吗?

这个问题在这里已经有了答案:Nestedtry...catchinsideC++exceptionhandler?(2个答案)关闭去年。考虑以下C++代码:classMyException{};voidsomeFunction(){try{///...codethatmaythrow}catch(std::exception&e){throwMyException();}}问题异常e是在catchblock的开头还是在catchblock的末尾被吸收?在第二种情况下,抛出新的异常会导致两个异常在运行中,这不是我想要的。我想吸收std::exception并开始我自己的类型之一。

c++ - 地址 sanitizer : "SEGV on unknown adress" when using throw-catch and printf

当我扔东西时,例如一个int或一个charconst*,并使用printf检查错误,我得到一个AddressSanitizerError。我无法在网上找到任何类似的东西,而且我的代码示例非常基础,以至于我真的不明白它怎么可能会产生错误。精简代码示例:#includeintmain(){try{throw42;}catch(intmsg){printf("%d\n",msg);}return0;}运行代码时的控制台输出:ASAN:SIGSEGV===================================================================16533=

c++ - 使用C++ catch框架验证assert语句

是否可以使用C++CATCH框架来验证assert语句是否正确识别无效前提条件?//SourcecodevoidloadDataFile(FILE*input){assert(input!=NULL);...}//TestcodeTEST_CASE("loadDataFileassertsoutwhenpassedNULL","[loadDataFile]"){loadDataFile(NULL)//NowwhatdoIlookfor?} 最佳答案 假设您的示例的第一部分是被测源代码,第二部分是单元测试,那么您需要选择如何处理:一些

c++ - VS2013 错误 : LNK2019 When trying to build ZeroMQ server

我正在尝试在VisualStudio2013上用C++构建这个简单的ZeroMQ服务器。#include"stdafx.h"#include"zmq.hpp"#include#include#includeusingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){//Preparecontextandsocketzmq::context_tctx(1);zmq::socket_tsckt(ctx,ZMQ_REP);sckt.bind("tcp://*:5555");while(true){zmq::message_trequest;//Wai

c++ - 是否有 "safe"方法来声明 lippincott 函数,以便它不会在 catch 之外被调用?

ALippincottfunction是一个将异常转换为返回码的函数,可以在来自另一种不支持异常的语言(例如C)的回调中安全地处理该返回码。这样的函数,因为它们故意使用throw没有参数,因此重新抛出最近捕获的异常,不能在catch的上下文之外调用block。我想知道现代C++(c++17或c++20)是否有任何声明机制来专门识别此类函数,并确保只从catch的上下文中调用函数block(或来自另一个此类函数的上下文),如果从任何其他上下文调用它,则会生成编译时错误。 最佳答案 没有办法告诉编译器只应从catch处理程序调用特定函数

c++ - 使用 try_lock boost 锁定

我正在尝试解决Boost1.46.1的锁定问题-我尝试了一些方法但我不满意-因此很想听听干净的意见。线程A:必须始终等待并获取关键数据部分的锁更新一些关键数据手动解锁(或范围)线程B-绝不能阻塞(try_lock?)-如果获得锁,从提到的关键部分读取数据我不确定我是否需要shared_lock或者我是否可以用其他方式解决这个问题。编辑,我的代码如下:线程A:{//Criticalsectionboost::mutex::scoped_locklock(_mutex);}线程B:boost::mutex::scoped_locklock(_mutex,boost::try_to_lock

c++ - 在 C++11 中从 C++17 重新实现 std::map::try_emplace()?

std::map::try_emplace()看起来非常方便和高效,但它仅在C++17中可用。是否可以在C++11中重新实现它?templatepairtry_emplace(constkey_type&k,Args&&...args); 最佳答案 对于有序映射,您可以使用lower_bound接近行为:templatestd::pairtry_emplace_m(M&m,consttypenameM::key_type&k,Args&&...args){autoit=m.lower_bound(k);if(it==m.end()|

c++ - std::mutex::try_lock 虚假地失败?

也许I'mmisunderstanding关于std::mutex::try_lock:即使互斥量当前未被任何其他线程锁定,此函数也允许虚假地失败并返回false。这意味着如果没有一个线程锁定那个mutex,当我尝试一个try_lock时它可能返回false?为了什么目的?try_lock函数是否在锁定时返回falseOR如果没有人锁定它则返回true?不太确定我的非母语英语是否在愚弄我...... 最佳答案 Thismeansthatifnoonethreadhasalockofthatmutex,whenItryatry_loc

c++ - 想要 : a C++ template idea to catch an issue, 但在编译时?

我们有一个常量结构数组,像这样:staticconstSettingsSuT_table[]={{5,1},{1,2},{1,1},etc};结构如下:size_bytes:num_items:其他“元数据”成员所以“总大小”是单个元素的size_bytes*num_items。所有这些信息都在const数组中,在编译时可用。但是,请注意,_table的总大小与EEPROM本身的大小无关。_table不镜像EEPROM,它只描述了布局、用途和我们需要的其他“元数据”类型的信息。但是,您可以使用此元数据来确定我们正在使用的EEPROM的数量。数组简单地描述了存储在外部EEPROM中的数据

java - 限制 try block 范围。有关系吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Shouldjavatryblocksbescopedastightlyaspossible?保持较小的tryblock大小是否有任何性能优势(特别是在C++或Java中)[除了它可以为读者提供更多关于哪个语句可以抛出的信息]。鉴于以下方法,我不想抛出该方法。voidfunction()throwsException{statement1statement2statement3//canthrowstatement4statement5}这样做更好吗:选项1voidfunction(){try{stateme