g ++会为此代码生成错误。我必须将std::sin
更改为(double (*)(double))std::sin
。为什么?
#include <iostream>
#include <list>
#include <algorithm>
#include <cmath>
int main(int argc, char *argv[])
{
std::list<double> radians = {0.0, 3.14/2, 3.14};
std::list<double> sines(radians.size());
std::transform(radians.begin(), radians.end(), sines.begin(), std::sin);
for(auto i = radians.begin(), j = sines.begin(); i != radians.end(); i++, j++)
std::cout << "Angle and sine: " << *i << " " << *j << std::endl;
return 0;
}
因为std::transform
是功能模板,所以将功能对象参数的类型声明为模板参数。并且std::transform
具有多个重载。然后就没有上下文来确定应该选择哪个重载。