3

我找到了一个简单的代码:

using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
    in(std::cin), in(), std::cout << (_1 * 3) << " " );

我发现_1是用来表示每个输入整数的,但是这是怎么_1工作的呢?有谁知道?

PS:此代码来自第一个 BOOST 示例。当我运行文件时,我发现 for_each 永远不会终止,并且在每次“返回”单击后它都会保持读取的数字。知道为什么会这样吗?

4

2 回答 2

4

Lambda 将每个数字乘以三。从stdin. in应该是一个迭代器 - 请粘贴完整的代码。

_1是另一个答案中解释的占位符。这个问题也应该被标记Boost。那是一个Boost.Lambda

Lambda 表达式详解

于 2013-10-10T06:27:53.383 回答
4

这看起来像一个占位符(也看看这个 SO question)

std::placeholders命名空间包含占位符对象,其中[_1, . . . _N]N 是实现定义的最大数量。

当用作std::bind表达式中的参数时,占位符对象存储在生成的函数对象中,并且当使用未绑定参数调用该函数对象时,每个占位符 _N 被相应的第 N 个未绑定参数替换。

占位符对象的类型是DefaultConstructibleCopyConstructible,它们的默认复制/移动构造函数不会抛出异常,并且对于任何占位符_N,类型std::is_placeholder<decltype(_N)>都是定义并派生自std::integral_constant<int, N>

于 2013-10-10T06:31:08.780 回答