在尝试 C++11 的新特性时,我发现 std::placeholders::_1 不能直接用作 lambda:
#include <algorithm>
#include <functional>
// #include <boost/lambda/lambda.hpp>
using namespace std;
// using boost::lambda::_1;
using std::placeholders::_1;
int main()
{
int a[] = {1,2,3,4,5};
transform(a, a+5, a, _1 * 2);
}
Clang 3.3 错误:
tmp $ clang -std=c++11 -stdlib=libc++ -lc++ test.cpp
test.cpp:16:27: error: invalid operands to binary expression ('__ph<1>' and 'int')
transform(a, a+5, a, _1 * 2);
如果我将其更改为使用 Boost 的版本,它编译得很好。
为什么这不适用于标准版本?有没有办法让它工作或者我必须在这里使用丑陋的 lambda?
transform(a, a+5, a, [](int i){return i*2;});