草庐IT

try-except-else

全部标签

c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏

如果我有:#definelikely(x)__builtin_expect((x),1)#defineunlikely(x)__builtin_expect((x),0)if(A)returntrue;elseif(B)returnfalse;...elseif(Z)returntrue;else//thiswillneverreallyhappen!!!!raiseError();returnfalse;我能否像elseif(likely(Z))一样将likely()放在最后一个条件检查周围,以表示在编译器不影响分支预测的情况下最终语句(else)的可能性很小之前的检查?基本上,如果

c++ - 使用 Lambda/Template/SFINAE 自动化 try/catch-safeguarding trampoline 函数

我有100个左右的蹦床功能。我想知道是否可以自动将每个包装在try/catchblock中。请提前警告,这不是一个简单的问题。我将首先用(简化的)代码描述问题,然后在下面尝试尽可能地回答它,以便读者可以看到我的位置。Foo有一个函数指针表:编辑:这是一个C函数指针表。所以它可以接受staticW::w。签名在这里:http://svn.python.org/projects/python/trunk/Include/object.h编辑:我尝试了一个测试用例here:classFoo{Tabletable;Foo(){//Eachslothasadefaultlambda.:table

c++ - 错误 : pure virtual method called - terminate called without an active exception - Aborted

在我的A.h文件中:classA{private:unsignedshortPC;public:A():PC(0){}virtual~A(){}virtualvoidexecute(unsignedshortPC)=0;};在我的B.h文件中:classB:publicA{private:intstatus;boolexe;public:B:status(0),exe(false){}virtualB(){}voidexecute(unsignedshortPC);};在我的B.cpp文件中:#include#include"B.h"voidB::execute(unsignedsho

c++ - Try/Catch block 替换了析构函数中的方法 block

我最近的任务是查找我们部分代码中的内存泄漏。泄漏最终出现在特定对象的析构函数中……我发现了一些非常奇怪的东西。一位前同事写道:File::~File()try{Clear();}catch(...){Log("caughtexception");}文件类继承自一些基类。我的第一个问题是:这是严格合法的C++吗?它在VisualStudio2008中编译,但我向几个friend/同事展示了它,他们对它的工作感到非常震惊。它实际上并没有按预期工作,但是:这个对象继承的基类有一个现在永远不会调用的析构函数(相反,如果你只是将析构函数包装在一个常规方法block中,让try/catch作为该方

c++ - 大 if else 语句

如果有一个大的(大约100多个)ifelse语句,如下所示,并且ifelse条件可能是不规则的(例如,一些依赖于3个变量,一些依赖于4个),有没有办法让它变得更简单?基本上我有一个大约100多行的表,其中a、b、c和d作为列。基于a、b、c和d,我需要执行3种不同类型的功能。该表描述了一组业务规则。uint8a;uint8b;uint16c;uint8d;if(a==1&&b==1&&c==0){functionA();}elseif(a==5&&b==5&&c==2&&d==2){functionB();}elseif(a==1&&(b==36||b==7)&&c==0){funct

c++ - SSE 内在函数中的 if/else 语句

我正在尝试使用SSE内在函数优化一小段代码(我是该主题的完全初学者),但我对条件的使用有点卡住。我原来的代码是:unsignedlongc;unsignedlongconstant=0x12345678;unsignedlongtable[256];intn,k;for(n=0;n>1);elsec>>=1;}table[n]=c;}这段代码的目的是计算一个crc表(常数可以是任何多项式,在这里不起作用),我想我的优化代码会是这样的:__m128x;__m128y;__m128*table;x=_mm_set_ps(3,2,1,0);y=_mm_set_ps(3,2,1,0);//of

c++ - 是否可以在不同的类中编写/包装异常处理组件(try、catch)?

这是关于将异常处理逻辑包装在某种类中。在写c++的时候代码,很多时候我们需要根据客户端抛出的异常捕获许多类型/变体。这导致我们在catch()子句中编写类似类型的代码(多次)。在下面的示例中,我编写了function(),它可以以多种可能的形式抛出异常。我想知道是否有可能以类的形式编写/包装这样的逻辑,以便最终用户必须一次编写类似类型的代码?有什么意义吗?#include#include#include#include//thisfunctioncanthrowstd::exception,std::string,intorunhandledvoidfunction(){std::ve

c++ - 不明确的 if 和 else 分支 : Is the behaviour defined?

我最近遇到了一些像下面这样的C++代码:if(test_1)if(test_2){//Dostuff}elseexit(0);这是不明确的,因为编译器可以将其视为:if(test_1){if(test_2){}else{}}或作为:if(test_1){if(test_2){}}else{}这段代码的行为是根据任何标准(C、C++)定义的吗?我在VC++上的一个C++程序中看到这段代码,它似乎更喜欢第一种解决方案。 最佳答案 Isthebehaviourofthiscodedefinedaccordingtoanystandard(

c++ - C++错误代码vs ASSERTS vs Exceptions选项options :( [closed]

Closed.Thisquestionisopinion-based。它当前不接受答案。想要改善这个问题吗?更新问题,以便editingthispost用事实和引用来回答。4年前关闭。ImprovethisquestionCodeInquestion我已经听到(并且反驳)围栏两侧的C++异常口头禅。已经有一段时间了,我只想再次集中我自己,此讨论是特定于我链接的代码(或低级类,例如容器),它是依赖项。我曾经使用C程序员作为防御和error_code,但是这是一种令人厌烦的练习,并且我现在正在以更高的抽象级别进行编程。因此,我正在重写一个容器类(及其依赖项),以使其更灵活,读取效果更好(迭

c++ - 是否按照编写的顺序测试 ifs 是 if-else...if-else...if-else block ?

是否可以保证if-elseif-elseif-elseblock中的ifs会按照编写顺序进行测试。我问这个是因为我经常尝试通过将最常见的情况放在首位来优化我的代码,我想知道编译器所做的一些优化是否会改变测试if的顺序。所以,如果我正在编写这样的代码:if(cond1)//Firstif(forthecaseIhavethemostoften){doSomething1();}elseif(cond2)//Secondif(forthesecondcaseIhavethemostoften){doSomething2();}elseif(cond3)//Thirdif(forthethi