У меня есть код, который использует std::complex<double>
тип.
От Руководство FFTW :
если у вас есть переменная
complex<double> *x
, вы можете передать его непосредственно в FFTW черезreinterpret_cast<fftw_complex*>(x)
,
Тем не менее, когда я делаю это в моем коде:
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]
,
Как решить это предупреждение? Спасибо !
У вас есть три варианта здесь:
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
, Заглушить только предупреждение не безопасно, так как это может привести к повреждению кода.Других решений пока нет …