将C++复杂数组传递给C语言

Tom*_*asG 7 c c++

我必须将复杂数据从C++传递给C函数.在C++中,数据自然存储在一个 std::vector<std::complex> c.C函数期望数据为double的数组,double a[]例如a [0] = Re(c [0]),a [1] = Im(c [0]),a [2] = Re(c [1 ])等

传递此类数据的最佳安全方法是什么?像铸造一样

(double*) (&c[0])
Run Code Online (Sandbox Code Playgroud)

惹麻烦?

很抱歉,如果这是重复的,我只能找到有关将C++复合体传递给C99复合体的相关问题的信息.

Ste*_*non 18

C++ 0x标准花了很长时间来保证这样的转换能够起作用(第26.4节):

此外,如果a是类型的表达式,cv std::complex<T>*并且表达式a[i]是为整数表达式定义的i,那么:

- reinterpret_cast<cv T*>(a)[2*i]应指定的实部a[i]

- reinterpret_cast<cv T*>(a)[2*i + 1]应指定虚部a[i].

和(§23.3.6):

一个向量的元素被存储连续的,这意味着如果v是一个vector<T, Allocator>其中T一些类型比其它布尔,那么它遵循身份&v[n] == &v[0] + n所有0 <= n < v.size().

普遍的C++ 03标准(虽然是矢量布局)不能保证复杂值的布局,但我会惊讶地发现它没有实现的实现.