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

Mot*_*tti 12 c++ lambda boost c++11

我已经看到两个最近的答案使用_1纯C++ 0x解决方案(没有明确提到boost lambdas).

是否有这样的动物,std::_1我认为拥有原生的lambdas将使这样的构造多余.

Google代码搜索std::_1会带来同一项目的两个结果,因此不确定.

ken*_*ytm 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

它们实际上包含在TR1(n1836§3.6.4 ; n1455)中bind,它们来自Boost.Bind库.


Mic*_*eyn 5

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

C++ 0x常见问题


jal*_*alf 5

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