C++ 从C++;
可能重复:C++ 从C++;,c++,c,c99,C++,C,C99,可能重复: 如果一个第三方C库期望一组C99复数作为一个参数,那么从C++调用它最简单的方法是什么,我的复数使用STL复合类型?我可以将它封装在一个新的c函数中,该函数接受浮点数并将它们转换为复数,但是有没有更直接的方法呢 根据C99: 6.2.5/13每种复杂类型都具有与阵列相同的表示和对齐要求 正好包含对应实类型的两个元素的类型;第一个要素是 等于复数的实部,第二个元素等于复数的虚部 号码 根据C++11: 26.4如果a是类型为cv*std::complex*的表达式,且表达式a[i]被
如果一个第三方C库期望一组C99复数作为一个参数,那么从C++调用它最简单的方法是什么,我的复数使用STL复合类型?我可以将它封装在一个新的c函数中,该函数接受浮点数并将它们转换为复数,但是有没有更直接的方法呢
根据C99: 6.2.5/13每种复杂类型都具有与阵列相同的表示和对齐要求 正好包含对应实类型的两个元素的类型;第一个要素是 等于复数的实部,第二个元素等于复数的虚部 号码 根据C++11: 26.4如果a
是类型为cv*std::complex*
的表达式,且表达式a[i]
被定义为整数表达式i
,则:
应指定reinterpret\u cast(a)[2*i]
的真实部分,以及a[i]
应指定reinterpret\u cast(a)[2*i+1]
a[i]
std::complex
数组的指针
注意到,C++的旧版本不能保证这种布局。
不会创建包装器是一个优雅的方式来完成它。不一定是正确的方式,但是一个特殊的声明加上一个简单的指针转换可能会起作用。在C++ 11中,布局被定义为与C99中的相同。见第26.4节。我喜欢这个答案,尽管我希望有一种不复制数据的方法。感兴趣的代码中的数组很容易是数百万个大小为双精度复数的数组。但是如果std::complex类型的布局不同,我将不得不重新设计或复制。@Boperson:的确如此。我只看了类定义,没有注意到前导部分。“Fadecomic:实际上你运气不错:我错过了C++标准的条款,它指定布局与C类型相同。请参阅更新的答案。