【发布时间】:2012-12-20 19:21:31
【问题描述】:
我觉得下面的代码非常好用,没有害处:
auto fn = [](bool b = false) -> int // NOT legal in C++11
{
return b ? 1 : 0;
};
为什么 C++11 明确禁止 lambda 表达式的默认参数?
我只是想知道背后的基本原理和考虑因素。
我想知道 C++11 标准所说的“WHY”而不是“WHAT”。
【问题讨论】:
-
因为从技术上讲,它是一个重载(我不确定这个词在这里是否正确,但你明白了):你可以用 bool 来调用它,也可以不用 bool。在这种情况下,lambda 函数的 type 应该是什么?在设计 lambda 时,他们不想引入可以具有可变数量参数(在您的情况下为 0 或 1)的 lambda 类型
-
“为什么”该代码非常方便且无害? (因为我们在这里问为什么)。
-
不管怎样,lambdas 实际上只是匿名函子,函子可以有默认参数。有趣的是 lambdas 不会。
-
@DietrichEpp C++03 不允许将本地类型用作模板类型参数,但我相信 C++11 消除了该限制。
-
@Dietrich :这是一个有争议的问题; aschepler 是对的——在 C++11 中,模板参数不再需要链接。
标签: c++ c++11 lambda default-arguments