[g ++为transform()的参数生成错误

问题描述 投票:0回答:1

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;
}
c++ g++
1个回答
1
投票

因为std::transform是功能模板,所以将功能对象参数的类型声明为模板参数。并且std::transform具有多个重载。然后就没有上下文来确定应该选择哪个重载。

© www.soinside.com 2019 - 2024. All rights reserved.