它仍然困扰着我。毕竟,C 也没有完全标准化的 ABI,但它可以与 ctypes 一起使用。为什么 C++ 不能实现同样的效果?
我找到了这个blog post该文章声称该问题的政治意义大于技术意义,但它是 12 年前写的。这个说法今天仍然准确吗?
最佳答案
事实上,你可以! (只是不适用于 ctypes) https://cppyy.readthedocs.io/en/latest/
但是,为了实现这一点,它实际上嵌入了一个 C++ 解释器,但并没有带来太大的性能优势。
C++ 没有官方 ABI 的一个原因是编译器非常注重性能,他们需要跨越函数和类边界来优化。使用不同的设置,即使具有相同的 ABI,您也可能会获得不同的接口(interface)。一个很好的例子是返回值优化(RVO),它改变函数签名以避免复制大型结构。
另一个原因是 C++ 是 super 元,大多数现代功能都依赖于生成代码并重新编译的模板。因此,您只需使用 C++ 易于编码的部分内容。
关于python - 为什么 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615722/