繁体   English   中英

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

[英]What does “cout <<(_1*3)” mean?

我发现了一个简单的代码:

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

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

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

Lambda表达式的细节

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM