(C++) 使用 lambda 作为嵌套函数,甚至用作通用函数
(c++) using lambdas as nested functions, or even as general functions?
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);
编辑:将"转到"更改为"继续">
以上是我代码的一部分,它应该显示我更喜欢使用嵌套 lambda 的情况。我可以用宏实现类似的效果,但它们确实使我的代码更脏,而这种方式使用的 lambda 看起来更干净,没有 ''。这里的"copy_num"函数仅在本地使用,而不是在其他任何地方使用,因此这比将"copy_num"定义为外部的正常函数更具可读性。如果需要,Lambda 还可以方便地捕获外部变量,在这种情况下,我可以减少重复的函数参数,再次使代码更清晰。
通过多次以这种方式使用 lambda,我想知道使用 lambda 作为函数的完整替代品是一个好主意还是坏主意。Lambda 可以完美地作为更灵活的函数形式,可以嵌套或匿名。如果 lambda 的作用与相同形式的普通函数没有区别,编译器将足够聪明地编译它们,就好像它们是普通函数一样。
或者也许未来的c/c ++通常允许嵌套函数?
我认为这种方法没有任何问题。它肯定比C'ish #define's
更安全,节省是我能想到的最小的优势。
在 lambda 支持成熟之前,您可能会看到编译器难以生成"最佳"代码。
如果需要,Lambda 还可以方便地捕获外部变量,在这种情况下,我可以减少重复的函数参数,再次使代码更清晰。
是的,一旦其他地方需要,lambda + 捕获可以很容易地迁移到保存状态并在其上定义一些操作的类。
或者也许未来的c/c ++通常允许嵌套函数?
这是对嵌套函数的完全充实支持。请记住,未捕获的 lambda 可能会衰减到函数指针。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗