草庐IT

c++ - goto 和析构函数兼容吗?

此代码导致未定义的行为:voidsome_func(){gotoundefined;{Tx=T();undefined:}}构造函数没有被调用。但是这段代码呢?x的析构函数会被调用吗?我想会的,但我想确定一下。:)voidsome_func(){{Tx=T();gotoout;}out:} 最佳答案 是的,析构函数将按预期调用,就像您因异常提前退出作用域一样。标准6.6/2(跳转语句):Onexitfromscope(howeveraccomplished),destructorsarecalledforallconstructed

python - Python中的`goto`

我必须在Python中使用goto。我找到了entriansgoto但是我的Python实现(Mac上的CPython2.7.1)没有这个模块,所以它似乎不是可移植的。它至少应该适用于所有支持CPython字节码的Python实现(尤其是我关心CPython和PyPy)。然后是thisrelatedquestion,和cdjc'sgoto.以及以下答案给出的答案。我可以去手动构建字节码(即编写我自己的Python编译器),因为有这样的指令(JUMP_ABSOLUTE和friend)。但我想知道是否有更简单的方法。是否可以通过inspect左右调用单个字节码指令?我也想过通过Python

java - Java字节码中的goto

所以前几天我在查看Java字节码的维基百科页面时遇到了这个示例:ConsiderthefollowingJavacode:outer:for(inti=2;iJava编译器可能会将上面的Java代码翻译成如下的字节码,假设上面的代码被放入一个方法中:0:iconst_21:istore_12:iload_13:sipush10006:if_icmpge449:iconst_210:istore_211:iload_212:iload_113:if_icmpge3116:iload_117:iload_218:irem19:ifne2522:goto3825:iinc2,128:goto

java - 如何正确使用 goto 语句

我正在上高中的AP计算机科学类(class)。我决定将goto语句扔到我们的一个实验室中只是为了玩玩,但我得到了这个错误。Exceptioninthread"main"java.lang.Error:Unresolvedcompilationproblems:Syntaxerrorontoken"goto",assertexpectedrestartcannotberesolvedtoavariableatChapter_3.Lab03_Chapter3.Factorial.main(Factorial.java:28)我去了Stackoverflow上的一个goto问题,以了解如何正

c++ - 'goto *foo' 其中 foo 不是指针。这是什么?

我在玩labelsasvalues最后得到了这段代码。intfoo=0;goto*foo;我的C/C++经验告诉我*foo意味着dereferencefoo并且这不会编译,因为foo不是指针.但它确实编译。这实际上是做什么的?gcc(Ubuntu4.9.2-0ubuntu1~12.04)4.9.2,如果重要的话。 最佳答案 这是gcc中的一个已知错误。gcc有一个documentedextension允许以下形式的陈述goto*ptr;其中ptr可以是void*类型的任何表达式。作为此扩展的一部分,将一元&&应用于标签名称会产生标签

c++ - 我应该避免在这里使用 goto 吗?如果是这样,怎么做?

我正在编写一个函数来检查配对:intcontainsPairs(vectorhand){intpairs{0};loopstart:for(inti=0;i当它在第10行找到对子时,我想删除它找到对子的手中的牌,然后用删除的牌重新开始整个循环以找到第二对(如果有的话)。对我来说,goto是最直观的方法,但在这种情况下,这是真的吗? 最佳答案 试试这个:intcontainsPairs(vectorhand){intpairs{0};for(inti=0;i这几乎是你的版本,唯一的区别是,不是goto,而是i--;打破;。这个版本比你

c++ - 为什么通过 goto 后退时调用析构函数

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Willusinggotoleakvariables?在下面的例子中,当调用goto去“向后”时,会调用A的析构函数。为什么会这样?对象a没有离开它的范围,是吗?标准是否说明了关于goto的这种行为?voidf(){start:Aa;gotostart;} 最佳答案 6.6跳转语句[stmt.jump]第2段:Onexitfromascope(howeveraccomplished),objectswithautomaticstorageduration(

c++ - 如何有效地避免使用 goto 和中断嵌套循环

我想说的是,在使用C/C++编程时,使用goto被认为是一种不好的做法。但是,给定以下代码for(i=0;i我想知道如何在不使用goto的情况下有效地实现相同的行为。我的意思是,我们可以在每个循环结束时检查condition之类的事情,但是AFAIKgoto只会生成一个汇编指令,它将是一个jmp.所以这是我能想到的最有效的方法。还有其他被认为是好的做法吗?当我说使用goto被认为是一种不好的做法时,我错了吗?如果我是,这会是使用它的好案例之一吗?谢谢 最佳答案 (imo)最好的非goto版本看起来像这样:voidcalculateS

c++ - 是否可以将 goto 与 switch 一起使用?

C#似乎可以,但我需要C++,最好是跨平台。基本上,我有一个开关,可以根据单个条件对内容进行排序,然后在其他所有内容上回退到默认处理。说:switch(color){caseGREEN:caseRED:caseBLUE:Paint();break;caseYELLOW:if(AlsoHasCriteriaX)Paint();elsegotodefault;break;default:Print("Uglycolor,nopaint.")break;} 最佳答案 艾哈迈德的回答很好,但也有:switch(color)caseYELLO

c++ - GOTO 还是不 GOTO?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭3年前。Improvethisquestion目前我正在开发一个大量使用goto语句的项目。goto语句的主要目的是在例程中有一个清理部分,而不是多个返回语句。如下:BOOLfoo(){BOOLbRetVal=FALSE;int*p=NULL;p=newint;if(p==NULL){cout这使得我们可以在代码中的某个部分(即Exit标签之后)跟踪我们的清理代码变得更加容易。但是,我已经阅读了很多地方,使用goto语句是不好的做法。