可能重复:
为什么使用goto不好?
GOTO仍被视为有害吗?
我通过xkcd进行了调整,看到了这个(几年前还读了一些关于它们的负面文章):

这究竟是什么问题?为什么goto甚至可以在C++中使用呢?
我为什么不使用它们?
这是一个通用的问题,以帮助有程序问题的新程序员,但不知道如何使用调试器来诊断问题的原因.
这个问题涉及两类更具体的问题:
[What is a debugger and how can it help me diagnose problems?](https://stackoverflow.com/q/25385173)
我要说的是,goto在C/C++编程方面,使用被认为是一种不好的做法.
但是,给出以下代码
for (i = 0; i < N; ++i)
{
for (j = 0; j < N; j++)
{
for (k = 0; k < N; ++k)
{
...
if (condition)
goto out;
...
}
}
}
out:
...
Run Code Online (Sandbox Code Playgroud)
我想知道如何有效地实现相同的行为而不使用goto.我的意思是我们可以做一些事情,例如condition在每个循环结束时检查,但是AFAIK goto将只生成一个汇编指令jmp.所以这是我能想到的最有效的方法.
有没有其他被认为是好的做法?当我说使用goto被认为是一种不好的做法时,我错了吗?如果我,这是否是使用它的好情况之一?
谢谢
我编写了一个程序来反转用户输入的字符串,但它不起作用。我使用Reverse the string in C++string reverse_name(name.rbegin(), name.rend())做到了这一点,但它不起作用并给了我错误:
从 'std::__cxx11::basic_string<char, 没有可行的转换,
std::char_traits<char>、std::allocator<char> >::reverse_iterator'(又名
'reverse_iterator<__normal_iterator<char *, std::__cxx11::basic_string<char> > >') 到
'std::__cxx11::string'(又名'basic_string<char>')
字符串reverse_word = (word.rbegin(), word.rend());
我的代码:
#include <iostream>
using namespace std;
int main()
{
string word, reversed_word;
cin >> word;
reversed_word = (word.rbegin(), word.rend());
cout << reversed_word;
return 0;
}
Run Code Online (Sandbox Code Playgroud)