草庐IT

Try-finally

全部标签

c++ - 虚拟 final方法是否比根类中的非虚拟方法更好?

我有一个抽象类,它是类层次结构的根。该根类有一个带有一些简单实现的方法,似乎没有必要随时随地更改该实现。使该方法成为非虚方法很好,但是某些子类可能会意外地重新实现它。在这种情况下,虚拟final方法是更好的解决方案吗? 最佳答案 如果您决定将该方法声明为virtual...final,您将使所有用户支付虚拟调度的运行时成本,以保护可能意外隐藏基类的函数。由于C++的指导原则之一是“你don'tpayforyoudon't使用”,我认为最好让函数保持非虚函数,如果他们隐藏了功能。 关于c+

c++ - 在单个函数中混合 '__try' 和 'try' - 通过 Lambda

众所周知,WindowsSEH不支持C++异常处理机制。我们不能在单个函数中使用try和__try。这将导致编译器错误:__try{try{MayThrowCPPException_OR_SEH();}catch(...){}}__except(EXCEPTION_EXECUTE_HANDLER){}它将呈现:C2713:Onlyoneformofexceptionhandlingpermittedperfunction.大多数人不喜欢的一个选项是“YeswithSEHExceptions(/EHa)”编译器选项。这将有助于C++try/catch处理这两个异常。我们需要将这样的函数放

c++ - C++中的try catch在未命中时会影响性能吗

我有一段代码,其中函数中有一个trycatch并且函数被命中。100+次。代码每次都提早返回,而没有实际命中trycatch。这会影响VisualStudio中的性能吗?我看到了性能影响。我的代码是:voidfoo(inta){if(a>value){return;}try{possibleErrorFunction();}catch{}}我把它改成:voidfoo(inta){if(a>value){return;}bar();}voidbar(){try{possibleErrorFunction();}catch{}}第二个代码似乎快了大约10秒。对此有什么合理的解释吗?

c++ - 如何使 rValue 引用在 RR 获取其值的 try block 之外可用?

假设我们不想重新设计函数a_func_that_may_throw。try{T&&rr=a_func_that_may_throw();}catch(conststd::exception&e){/*Dealwiththeexceptionhere.*/}//Question:Howtoadaptthecodeabovesoastohave`rr`availablehere?抱歉没有问清楚我的问题。添加以下内容(希望)使问题更清楚。我们可以对指针这样做:T*ptr=nullptr;try{ptr=a_source_that_may_throw();}catch(conststd::ex

c++ - 为什么我收到错误 : initializing argument 1 of 'Item::Item(int)' [-fpermissive] in Eclipse when I try to compile my C++ code?

我是C++的新手,在盯着它看了太久之后终于放弃了尝试编译它。编译器似乎出于某种原因拒绝了头文件中的构造函数原型(prototype)......我无法弄清楚它有什么问题。项目.h:#ifndefITEM_H_#defineITEM_H_classItem{public:Item(int);//ThislineiswhatEclipsekeepsflaggingupwiththeerrorinthetitlevirtual~Item();Item*getNextPtr();intgetValue();voidsetNextPtr(Item*);};#endif/*ITEM_H_*/在我的

c++ - 在构造函数 C++ 中处理 Try-catch block

我面临这样一种情况,我需要在构造函数中使用try-catchblock。特别是,构造函数尝试调用tryblock中的函数,如果失败,它将调用另一个函数来设置一些值。在这两种情况下,构造函数都应该正确地创建对象,并且在这两种情况下它都必须在结束之前调用一些其他方法。情况如下:classA{A(inti){try{setDevice(i);}catch(DeviceException&ex){setDevice(0);throwex;}otherMethod();}}但是,如果在tryblock中发生错误,则不会调用otherMethod(),因为执行在catchblock内结束,我不能像

c++ - C++ 如何处理 try catch block 中的赋值?

我使用clang分析器检查我的C++代码是否存在缺陷和错误。我有以下构造:#include#includedoublesomethingThatMayThrow()throw(std::exception){if(rand()%2){throwstd::exception();}return5.0;}intmain(){doublevalue=2.0;try{value=somethingThatMayThrow();}catch(conststd::exception&){std::cout分析器现在提示变量value的初始值从未被读取。但是,很明显,当且仅当tryblock中出现异

c++ - boost::phoenix try_catch_all 构造编译失败

我正在编写用于日期解析的boost::spirit::qi语法。#include#include#includetemplatestructdate_rfc1123_grammar:boost::spirit::qi::grammar{typedefboost::gregorian::datevalue_type;date_rfc1123_grammar():date_rfc1123_grammar::base_type(date){namespaceqi=boost::spirit::qi;namespacephx=boost::phoenix;usingqi::_pass;usin

c++ - 带有尾随返回类型的 final、override、const 的语法

我正在尝试覆盖虚拟,但也使用关键字override、final和const,以及尾随返回类型。问题似乎出在派生类中,编译器错误(说我没有指定尾随返回类型)并没有太大帮助。代码在这里:https://wandbox.org/permlink/zh3hD4Ukgrg6txyE也贴在下面。我玩过不同的顺序,但似乎仍然无法正确处理。任何帮助将不胜感激,谢谢。#includeusingstd::cout;usingstd::endl;usingstd::ostream;////////////////////////////////////////////////BasestuffclassBa

c++ - 为什么 GCC 给我一个错误 : no unique final overrider?

在下面的代码中,我收到以下警告和错误:test.cpp:15:warning:directbase'B'inaccessiblein'D'duetoambiguitytest.cpp:15:error:nouniquefinaloverriderfor'virtualvoidA::f()'in'D'但是如果我从A中移除B的虚拟继承(即structB:publicA),我只会得到警告,没有错误。structA{virtualvoidf()=0;};structB:publicvirtualA{voidf(){}};classC:publicB{};structD:publicC,virt