这是lambda表达式的有效(滥用)用法吗?
|
众所周知,要从嵌套循环中将“ 0”从外循环中移出却没有一个都不容易:
a
goto
(示例代码。)
外循环中的另一种条件检查(示例代码。)
将两个循环都放在一个额外的函数中并返回,而不是返回“ 0”(示例代码。)
但是,您必须承认,所有这些都有些笨拙。尤其是缺少函数版本,因为缺少调用循环的上下文,因为您需要将循环中需要的所有内容作为参数传递。
此外,对于每个嵌套循环,第二个循环变得更糟。
因此,我个人仍然认为goto
版本是最干净的版本。
现在,考虑所有C ++ 0x和其他内容,第三个选择使我有了使用lambda表达式的想法:
#include <iostream>
bool CheckCondition(){
return true;
}
bool CheckOtherCondition(){
return false;
}
int main(){
[&]{while(CheckCondition()){
for(;;){
if(!CheckOtherCondition())
return;
// do stuff...
}
// do stuff...
}}();
std::cout << \"yep, broke out of it\\n\";
}
(例如在Ideone的示例。)
这使得第三个选项提供的简单ѭ5的语义美感同时又不遭受上下文问题的困扰,并且(几乎)与goto
版本一样干净。它甚至比上述任何选项都更短(按字符)。
现在,在发现语言的优美用法之后,我学会了保持喜悦,因为几乎总是存在某种弊端。有这个吗?还是有解决这个问题的更好方法?
没有找到相关结果
已邀请:
4 个回复
扫窟
时,请使用
。
篮肥炼皖
骚瓤
这是众所周知的(函数,就像在BASIC中一样),更清晰(算法的名字很好地解释了它的作用),并且其作用与您的完全相同。 尤其是缺少函数版本,因为缺少调用循环的上下文,因为您需要将循环中需要的所有内容作为参数传递。 我认为这是一个优势。您确切地看到了使小碎片变皱所需的东西。编程时,明确性通常是一件好事。
完趣镐