“cout<(_ 1 * 3)”是什么意思?

时间:2013-10-10 06:26:21

标签: c++ boost cout

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

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将永远不会终止,并且在每次“返回”点击后它会保持读取数字。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

Lambda将每个数字乘以3。阅读stdin后。 in应该是迭代器 - 请填写完整代码。

_1是占位符,如另一个答案中所述。该问题也应该标记为Boost。那是Boost.Lambda

Lambda expressions in details

答案 1 :(得分:4)

这看起来像placeholder(另请参阅this SO question)

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

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

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