如何为C++指定void类型函数编写符合要求的lambda表达式?
你可以直接将原函数的逻辑迁移到lambda中实现,由于原函数本身返回值为void,编译器可以自动推导lambda的返回类型,你也可以显式标注->void明确返回类型。
常见实现示例
1. 可复用的lambda定义
和普通函数的调用方式完全一致,适合需要多次调用初始化IO的场景:
#include <iostream> #include <string> using namespace std; int main() { // 定义lambda:无捕获、接收string参数、返回void auto setIO = [](string s) -> void { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); }; // 调用方法和原函数完全相同 setIO("contest"); // 后续正常使用cin、cout读写即可 int n; cin >> n; cout << n << endl; return 0; }
注意:此处的
->void可以省略,C++11及以上标准会自动根据lambda内部逻辑推导返回类型为void,直接写auto setIO = [](string s) { /* 逻辑 */ };也可正常运行。
2. 一次性立即调用的lambda
如果只需要初始化一次IO,不需要复用lambda,可以写成立即执行的形式:
int main() { // 定义lambda后直接传入参数调用 [](string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); }("contest"); // 后续逻辑 return 0; }
如果你需要在lambda中访问外部变量,修改lambda开头的捕获块[]即可:
- 按值捕获所有外部变量:
[=] - 按引用捕获所有外部变量:
[&] - 捕获指定变量:
[变量名]/[&变量名]
内容的提问来源于stack exchange,提问作者Advitiya Jadhav
相关产品推荐
相关产品推荐

