3

我有一个使用该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]。如何解决这个警告?谢谢 !

4

1 回答 1

0

您在这里有三个选择:

  • 只需fftw_complex在需要时创建一个:fftw_plan_dft_c2r_1d(conf.FFTSize(), fftw_complex(tmp_spectrum.real(), tmp_spectrum.imag()), tmp_out, FFTW_ESTIMATE);
  • 不要在代码中使用 C++ 语言的复杂类型,而只使用该fftw_complex类型。
  • 使用 .在适当的翻译单元中禁用所有严格别名优化和实施-fno-strict-aliasing。仅使警告静音是不安全的,因为它可能会导致代码损坏。
于 2013-08-23T17:54:36.487 回答