#include <iostream>
int foo(int x = [](){ static int x = 0; return ++x; }()) { return x; };
int main() {
std::cout << foo() << foo(); // 1 2
}
我知道每次调用函数时都会评估默认参数。这是否意味着每次调用时 lambda 类型都不同?如果不是,请指出标准引用来解释为什么会这样。
这是否意味着每次调用时 lambda 类型都不同?
是的,这可以从 dcl.fct.default 和 expr.prim.lambda.closure 看出:
每次调用函数时都会评估默认参数,而对应的参数没有参数。 参数不得作为默认参数中的潜在计算表达式出现
lambda 表达式的类型(也是闭包对象的类型)是一种唯一的、未命名的非联合类类型,称为闭包类型,其属性如下所述。