Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C++;_C++_C_C99 - Fatal编程技术网

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]
总之,这意味着这两种类型具有相同的布局,因此您可以简单地向C函数传递一个指向
std::complex
数组的指针


注意到,C++的旧版本不能保证这种布局。

不会创建包装器是一个优雅的方式来完成它。不一定是正确的方式,但是一个特殊的声明加上一个简单的指针转换可能会起作用。在C++ 11中,布局被定义为与C99中的相同。见第26.4节。我喜欢这个答案,尽管我希望有一种不复制数据的方法。感兴趣的代码中的数组很容易是数百万个大小为双精度复数的数组。但是如果std::complex类型的布局不同,我将不得不重新设计或复制。@Boperson:的确如此。我只看了类定义,没有注意到前导部分。“Fadecomic:实际上你运气不错:我错过了C++标准的条款,它指定布局与C类型相同。请参阅更新的答案。