_1是C ++ 0x的一部分吗?

时间:2010-10-24 18:56:14

标签: c++ boost lambda c++11

我看到two最近answers使用_1作为纯C ++ 0x解决方案(没有明确提及boost lambdas)。

是否有像std::_1这样的动物我会认为拥有原生的lambdas会使这样的构造变得多余。

std::_1的Google代码搜索会从同一项目中带来two results,这样就无法确定。

3 个答案:

答案 0 :(得分:13)

是的,它们是std::placeholders命名空间中C ++ 0x的一部分,来自最新草案(n3126)§20.8.10.1.3“占位符”:

namespace std {
   namespace placeholders {
      // M is the implementation-defined number of placeholders
      extern unspecified _1;
      extern unspecified _2;
        .
        .
        .
      extern unspecified _M;
   }
}

它们实际上是included in TR1n1836§3.6.4; n1455)以及bind,它们取自Boost.Bind library

答案 1 :(得分:5)

显然它们是C ++ 0x的一部分,应该在符合编译器的<functional>标头中定义,请参阅以下FAQ:

C++ 0x FAQ

答案 2 :(得分:5)

是的,它们是C ++ 0x的一部分。我没有仔细检查TR1规格,但我怀疑它们是在那里添加的(TR1本质上是C ++ 03的仅库扩展,因此它不能依赖lambdas),然后,因为它已经存在在TR1中,在C ++ 0x中再次删除它会不必要地具有破坏性,即使你拥有真正的lambda也不再需要它。