enum { WITH_ZERO };
auto copy_num = [](int n, char target[NUM_LEN]) -> int {
char temp;
for (int j = NUM_LEN - 1; j >= 0; j--) {
if ((temp = n % 10 + '0') == '0') {
return WITH_ZERO;
} else {
target[j] = temp;
n /= 10;
}
}
return !WITH_ZERO;
};
if (copy_num(i, num_copy) == WITH_ZERO) {
continue;
}
if (i * 3 > MAX_NUM) {
continue;
}
copy_num(i * 2, num_double);
copy_num(i * 3, num_triple);
//编辑:将'转到'改为'继续'
以上是我的代码的一部分,它应该显示在什么情况下我更喜欢使用嵌套的lambdas。我可以用宏来实现类似的功能,但是它们确实使我的代码更脏,而使用这种方式的lambdas看起来更干净,没有'\'。这里的'copy_num'函数仅在本地使用,而不是在其他任何地方使用,因此这比将'copy_num'定义为外部的正常函数更具可读性。如果需要,Lambdas也可以方便地捕获外部变量,在这种情况下,我可以减少重复的函数参数,再次使代码更清晰。
通过这种方式多次使用lambdas,我想知道使用lambdas作为函数的完整替代是好是坏。 Lambdas可以很好地工作,作为一种更灵活的函数形式,可以嵌套或匿名。如果lambda所做的事情与同一个表单的正常函数没有什么区别,编译器将足够聪明地编译它们,就好像是普通函数一样。
或许未来的c / c ++通常会允许嵌套函数?
答案 0 :(得分:1)
我认为这种方法没有任何问题。它肯定比C'ish #define's
更安全,\
中的节省是我能想到的最小优势。
在lambda支持成熟之前,您可能会看到编译器难以生成“最佳”代码。
如果需要,Lambdas也可以方便地捕获外部变量,在这种情况下,我可以减少重复的函数参数,再次使代码更清晰。
是的,一旦在别处需要,lambda + capture可以很容易地迁移到一个保存状态的类,并在其上定义一些操作。
或许未来的c / c ++通常会允许嵌套函数?
这个 对嵌套函数的完全支持。请记住,不捕获的lambda会衰减为函数指针。