Boost FFT示例-编译时出错,这段代码是做什么的?

3
我在按照以下链接中的示例进行操作:

https://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/math_toolkit/high_precision/use_multiprecision.html

在以下行中遇到了错误:
[&n](cpp_dec_float_50& y)


g++ -I ../boost_1_71_0 fft.cpp -o fft
fft.cpp:52:3: error: expected expression
  [&n](cpp_dec_float_50& y)
  ^
1 error generated.

完整块是:
// Generate the sine values.
std::for_each
(
  sin_values.begin (),
  sin_values.end (),
  [&n](cpp_dec_float_50& y)
  {
    y = sin( pi<cpp_dec_float_50>() / pow(cpp_dec_float_50 (2), n));
    ++n;
  }
);

什么是"[&n](cpp_dec_float_50& y)",为什么会出错?

那是一个lambda表达式。请确保您启用了C++11。https://dev59.com/o2sz5IYBdhLWcg3w17fQ - drescherjm
1个回答

2

[&n](cpp_dec_float_50& y) 实际上是一个lambda表达式的第一部分,也就是一个匿名函数。

为什么会出现错误?

你需要编译成C++11(或更高版本)。在编译器命令行中使用 -std=c++11(或 -std=c++14-std=c++17)。例如:

g++ -std=c++11 ...

成功了!我听说过 AWS 上的 Lambda 函数,但我不知道 C++ 中也有它们的声明。我不确定该查什么,谢谢。 - Joe
1
你完全可以使用它们,它们非常方便用于STL算法等。 - Paul Evans
“AWS上的Lambda函数”并不是真正的lambda函数,就像“好的振动”不是物理振动一样。“AWS Lambda”只是AWS选择的名称(通过宽松的类比),用于描述AWS服务中的一种特定类型,该服务允许您编写小型代码片段,并将其作为私有微服务在AWS堆栈内执行(例如缩略图生成器)。宽松的类比是,lambda函数允许您在使用点处编写函数定义,而无需单独定义它,而AWS Lambda“允许您在不提供或管理服务器的情况下运行代码”。 - Szczepan Hołyszewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接