草庐IT

java - Java中有goto语句吗?

我对此感到困惑。我们大多数人都被告知Java中没有任何goto语句。但是我发现它是Java中的关键字之一。可以在哪里使用?如果不能用,那为什么要将它作为关键字包含在Java中? 最佳答案 JamesGosling创建了支持goto语句的原始JVM,但后来他删除了这个不需要的功能。goto是不必要的主要原因是它通常可以用更具可读性的语句(如break/continue)或通过将一段代码提取到方法中来替换。来源:JamesGosling,Q&Asession 关于java-Java中有got

java - Java break/label 语句可以在字节码混淆中充当 "goto"吗?

我试图在反编译后对一些Java.class文件进行去混淆处理,但我遇到了部分代码,它以我认为无法使用的方式使用标签。我不知道这是反编译器误解标签的错误,还是代码被故意这样混淆了。也就是说,在Java字节码中可以这样使用标签吗?请注意,标checkout现在相关的break语句之后,而不是之前。它几乎似乎是将它们用作goto,而不是用于跳出循环的标签。也根本没有循环,所以我对它们应该如何在这里使用有点困惑。这是怎么回事?我在评论中标记了3个标签(###)if(i!=96){if((i^0xFFFFFFFF)!=-98){if(i==98)breaklabel417;//###Herear

c++ - 如何消除在 switch case 中使用 goto

基本上我想接受来自用户的特定字符,然后使用switchcase将与该字符大小写相关的字符串传递给另一个函数。例如。casei:strcpy(str,"ice-cream");other_function(str);break;如果用户打印了任何默认字符,那么它应该打印默认语句并再次从用户那里获取字符并检查其大小写。我使用goto完成了此操作,但是是否有任何其他选项可用于避免或替换此代码中的goto。p:{cout>c;switch(c){chart[20];case's':strcpy(t,"saving");a[i].setype(t);break;case'c':strcpy(t,

c++ - 在这种情况下我应该避免使用 "goto"吗?

我正在制作一个“连接迭代器”,即一个将迭代int**中的int的迭代器。它的构造函数需要:一个T**数组,代表每个子数组的开始。一个T**的数组,代表每个子数组的结尾。瞧,我遇到了goto似乎是合适的情况。但我内心的某些东西在尖叫“不!!”所以我想我应该来这里问:我应该尽量避免goto这样的情况吗?(如果我这样做会提高可读性吗?)#includetemplateclasslazy_concat_iterator{//Thiscodewasmeanttoworkforanyvalidinputiterator//butforeasierreading,I'llassumethetypei

c++ - 跳转到 VLA 阵列上时出现段错误

下面的例子演示了这个问题:#includeintmain(){unsignedintremaining=1;gotoloop;while(remaining){unsignedchartmp[remaining];printf("&tmp:%p\n",tmp);loop:remaining=512;//orsomethingelse;}}最初,“remaining”变量的初始化有点长,我使用goto在一行中对其进行初始化。然而,现在这个例子在printf行给出了段错误。看起来数组没有正确初始化。即使gdb也无法打印tmp数组的地址:ProgramreceivedsignalSIGSEG

c++ - 'unused' 的初始化被 'goto label' 跳过 - 为什么我为 std::string 而不是为 int 获取它?

我在某些代码中遇到了这个错误,经过一些试验后我偶然发现了这个怪异之处——我为std::string得到了它,但没有为int得到它。对于std::string我得到errorC2362:initializationof'unused'isskippedby'gotolabel':{gotolabel;std::stringunused;label:;}对于int我没有收到任何错误,但是:{gotolabel;intunused=10;label:;}为什么不同?是因为std::string有一个非平凡的析构函数吗? 最佳答案 这包含在

c++ - 从嵌入式 C/C++ 逻辑中删除 goto 语句

我想去掉这个goto语句。任何人都可以告诉我相同的逻辑。下面的代码不是我想要修改的确切代码,但它会支持我的问题。请不要在评论此帖子时询问代码的重要性,因为它只是一个示例。intresult[i][j];for(inti=0;i 最佳答案 将这些循环放入一个函数中,为其指定一个合适的名称,并在完成后return;。如果它复杂到需要两个循环,它就值得一个名字。finishedflag很难读懂,所以无论如何你都应该把它放在它自己的函数中,让它过时。异常仅适用于您无法在本地处理的错误。使用它们来通知更高级别的功能您无法修复的错误,而不是如果

c++ - 函数体内的url如何被编译

我只是将一个url粘贴到我的代码中,忘记对其进行注释,但我很惊讶地看到MSVC++成功编译了它。我的代码是这样的,voidmy_function(){http://www.google.co.in/}这怎么会被MSVC++编译? 最佳答案 实际上,http后跟冒号的C++将其视为标签,您可以在goto中使用它语句(如gotohttp;),其余(即//www.google.co.in)被视为单行注释。这就是它被编译的原因。查看更多,voidyour_function(){http://www.google.co.in/https://

c++ - 我们如何在 C++ 中实现 if -goto 循环?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭7年前。Improvethisquestion我们在学校学过ifgoto循环。讲师给出的程序不起作用。不工作我的意思是它被编译了,但是当我执行它时,输出什么也没有:#includeusingnamespacestd;intmain(){inti=0;prev:i++;//prevlabelcout要实现的实际循环等同于此for循环:for(in

c++ - 错误 : Label "foo" used but not defined

所以我在使用一些C++代码时遇到了前面提到的错误,代码看起来有点像这样:#includeusingnamespacestd;charfoodstuffs;voidfruit(){cin>>foodstuffs;switch(foodstuffs){case'a':gotofoo;break;case'b':gotofooo;break;}}intmain(){cout确切的代码要复杂得多,但这只是为了向您展示我遇到的错误。现在我意识到每个人都出于某种原因鄙视“goto”语句,但我的实际代码中充满了太多的goto,以至于我真的没有时间/耐心回去更改它们。此外,我是一名新手程序员,我发现g