【发布时间】:2011-05-20 15:48:05
【问题描述】:
什么是更好的样式/可读性?
我有一个循环读取输入并根据输入做不同的事情,当发生错误时,我需要一个简单的return;。示例:
while( get_input() )
{
if( input == "somethingcool" )
{
if( !process_somethingcool() )
return; // <-- a couple of these
}
//...
else // bad input, error handling is fancier than this, but irrelevant to the question
return;
}
return;
那么我是否应该用goto end; 替换单个return;s 并在上面示例中的最后一个返回正上方放置一个标签end:?我不需要“使用 RAII”,因为在 if 块中没有分配任何内容。除了样式/可读性/性能之外,这两种方式在所有意义上都是相同的?
我认为性能是相同的,但只是为了确定:是吗?
【问题讨论】:
-
这种情况下是否有理由不使用异常?
-
让毫无根据的
goto-bashing 开始吧。 2011 个 cookie 用于逻辑论证。 -
@rubenvb 我觉得它与您的问题相关,因为我认为这是处理您要处理的问题的标准 C++ 方式,如果我正确理解了您想要的.实际上,C++ 异常处理正在做你正在用“goto”做的事情,只是有更多的形式和额外的功能,你可能会发现它很有用。其他 C++ 程序员也可能更熟悉它,根据我的经验,他们中的大多数人使用异常的次数要比使用 goto 的次数多。
-
@James:我不是说
goto是“好”。我不是说它就在这里(事实上,我的回答正好相反)。我知道通常有充分的理由不使用它。事实上,证明程序的正确性在使用无条件跳转时会出现一些问题。然而,我反对的是毫无根据地抨击一个功能,在这个问题的背景下(实际上在其他一些用例中),这个功能非常好。 -
@Dennis:如果没有客观的论据可以提出,这只是主观的。我认为答案和 cmets 总体上表明有很多客观的论据要提出,因此问题本身具有客观的价值。
标签: c++ coding-style return goto