只是一个简单的问题,有这个:
fftw_complex *H_cast;
H_cast = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
有什么区别:
H_cast= reinterpret_cast<fftw_complex*> (H);
和
H_cast= reinterpret_cast<fftw_complex*> (&H);
提前致谢
安东尼奥
最佳答案
当前问题的答案
不同的是他们做了两件完全不同的事情!
注意:您没有告诉我们 H
是什么,因此无法自信地回答问题。但一般原则适用。
对于第一种情况是合理的代码,H
应该是指向 fftw_complex
实例的指针(可能类型为 void*
?) .您这样做是为了告诉编译器 H
实际上是一个 fftw_complex*
,因此您可以使用它。
为了使第二种情况成为合理的代码,H
应该是一个内存布局与类 fftw_complex
相同的类的实例。我想不出一个令人信服的理由让自己陷入这种境地,这很不自然。基于此,并且由于您没有向我们提供有关 H
的信息,我认为这几乎可以肯定是一个错误。
原始答案
主要区别在于,在第二种情况下,您可以在源代码中搜索 reinterpret_cast
(并希望确保每次使用都清楚地记录在案并且是必要的恶行)。
但是,如果您从 void*
转换为另一种指针类型(这里是这种情况吗?),那么最好使用 static_cast
代替(也可以是很容易搜索到)。
关于c++ - Reinterpret_cast 在 C++ 中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6706901/