未显式传递参数时使用 lambda 默认为用户输入

Defaulting to user input using a lambda when parameter is not explicitly passed

我写了下面的代码(Still wondering about its uses...)如果参数不传默认为用户输入

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

unsigned getInput() {
    unsigned input;
    std::cin >> input;
    return input;
}

void foo(unsigned number = getInput()) {
    std::cout << number << "\n";
}

int main() {
    foo(1); //prints 1
    foo();  //defaults to user input    
    return 0;
}

我想问的是,有什么方法可以将 getInput() 函数转换为 lambda?

的内容
void foo(unsigned number = { []() {unsigned num = 0; std::cin >> num; return num; } }) {
    std::cout << number << "\n";
}

此外,如何在 中实现类似的功能?

当然可以,但是您错过了对 lambda 的调用:

void foo(unsigned number = [] {
               unsigned num = 0; 
               std::cin >> num; 
               return num; 
              }()   // <- call here
        ) 
{
    std::cout << number << "\n";
}

是的,您可以使用 lambda。你需要做的是在你定义它之后调用 lambda

void foo(unsigned number = []() {unsigned num = 0; std::cin >> num; return num; }()) 
//                         ^                   define lambda                    ^^^
//                                                               call lambda_____|