给定一个复数向量,我想获得它们的绝对值:
std::vector<std::complex<double>> in; // filling omitted
std::vector<double> out(in.size());
std::transform(in.begin(), in.end(), out.begin(),
&std::abs<std::complex<double>> // (1)
// [](std::complex<double> z){ return std::abs(z); } // (2)
);
根据我的理解,第 (1) 行和第 (2) 行应该具有相同的效果。
然而,虽然第 (2) 行编译正确,但第 (1) 行会产生错误:
../../../include/c++/12/bits/stl_algo.h:4263:31: error: cannot convert 'std::complex<double>' to 'double' in assignment
4263 | *__result = __unary_op(*__first);
| ~~~~~~~~~~^~~~~~~~~~
| |
| std::complex<double>
为什么我会收到此错误?为什么这里需要匿名函数?