Passing a C++ complex array to C

后端 未结 1 1921
星月不相逢
星月不相逢 2020-12-03 18:37

I must pass complex data to a C function from C++. In C++ the data is naturally stored in a std::vector c. The C function expects the data

相关标签:
1条回答
  • 2020-12-03 19:26

    The C++0x standard went to lengths to guarantee that such conversions will work (§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].

    and (§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().

    The layout of the complex value is not guaranteed by the prevailing C++03 standard (though the vector layout is), but I would be surprised to find an implementation for which it does not hold.

    0 讨论(0)
提交回复
热议问题