gpt4 book ai didi

c++ - 将 C++ 复杂数组传递给 C

转载 作者:可可西里 更新时间:2023-11-01 18:11:39 26 4
gpt4 key购买 nike

我必须将复杂数据从 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])

自找麻烦?

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

最佳答案

C++0x 标准竭尽全力保证此类转换有效(§26.4):

Moreover, if a is an expression of type cv std::complex<T>* and the expression a[i] is well-defined for an integer expression i, then:

reinterpret_cast<cv T*>(a)[2*i] shall designate the real part of a[i], and

reinterpret_cast<cv T*>(a)[2*i + 1] shall designate the imaginary part of a[i].

和(§23.3.6):

The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().

复值的布局由流行的 C++03 标准保证(尽管 vector 布局是),但我会惊讶地发现它不支持的实现.

关于c++ - 将 C++ 复杂数组传递给 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com