我最近注意到C99中存在types for complex values(注意到它们的构造宏是C11的一个功能)。

由于这是C语言,因此它们是内置类型,而不是带有重载运算符的结构等。但是-是不是我可以将它们视为基于C++的std::complex模板?即float _Complexstd::complex<float>double _Complex实际上与std::complex<double>相同吗?

注意:当然,它们具有完全相同的行为,因为C++具有C所没有的功能,但是请考虑一下,就好像我们将自己限制为“C子集”(除了这两种类型)一样。

如果它们实际上不是相同的-请说明它们之间的不同之处。

最佳答案

std::complex _Complex的主要区别在于界面。

要获得std::complex的真实部分,请使用 constexpr T real() const 成员函数,对于_Complex类型,同样需要 creal 宏。

因此它们不是同一类型,很难假装它们是,但是它们的内部布局确实相同。

C++ 17 29.5.4指出:



C18 6.2.5.13指出:



这意味着您可以使用std::complex<T>_Complex T为C和C++编写可互操作的代码。

注意:_Complex是C99中引入的。

关于c++ - C99中的_Complex类型的行为类似于C++中的std::complex <>吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55563217/

10-12 07:36
查看更多