我有一个使用std::complex<double>
类型的代码。
来自FFTW Manual:
如果您有变量
complex<double> *x
,则可以通过reinterpret_cast<fftw_complex*>(x)
将其直接传递给FFTW。
但是,当我在我的代码中执行此操作时:
tmp_spectrum = reinterpret_cast<std::complex<double>*>(fftw_alloc_complex(conf.spectrumSize()));
plan_bw_temp = fftw_plan_dft_c2r_1d(conf.FFTSize(), reinterpret_cast<fftw_complex*>(tmp_spectrum), tmp_out, FFTW_ESTIMATE);
我得到dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing]
。
如何解决这个警告?谢谢!
答案 0 :(得分:0)
这里有三个选项:
fftw_complex
时创建fftw_plan_dft_c2r_1d(conf.FFTSize(), fftw_complex(tmp_spectrum.real(), tmp_spectrum.imag()), tmp_out, FFTW_ESTIMATE);
:fftw_complex
-fno-strict-aliasing
类型。