【问题标题】:What does "cout <<(_1*3)" mean?“cout <<(_1*3)”是什么意思?
【发布时间】:2013-10-10 16:07:41
【问题描述】:

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

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

【问题讨论】:

    标签: c++ boost cout


    【解决方案1】:

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

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

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

    占位符对象的类型是DefaultConstructibleCopyConstructible,它们的默认复制/移动构造函数不会抛出异常,对于任何占位符_N,类型std::is_placeholder&lt;decltype(_N)&gt;是定义并派生自@987654330 @。

    【讨论】:

    • 这不是标准库占位符。 Boost.Lambda 在将 lambda 添加到 C++11 中之前,曾/现在使用此占位符来创建 lambda。
    • @Simple,是的,但是当我回答时我不知道 OP 正在使用 boost:P 不过,另一个答案包含指向 boost 文档的链接。
    【解决方案2】:

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

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

    Lambda expressions in details

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-10
      • 2021-07-26
      • 2015-09-02
      • 1970-01-01
      • 2020-01-20
      • 2017-09-30
      • 1970-01-01
      • 2011-12-07
      相关资源
      最近更新 更多