【发布时间】:2018-11-06 19:30:19
【问题描述】:
我想从另一种语言调用 C++ 构造函数,并且需要知道要给它什么参数。我认为应该是陈述的论点和“this”指针。但是在 Gnu G++ 中,“this”指针是先出现还是最后出现?除了“this”指针还有其他隐藏的参数吗?
由于我已经解决了这些问题,因此此问题不涉及其他问题,例如名称错误。这个问题只是关于构造函数的参数。我使用的特定语言也不是问题,因为它是一种正在开发中的语言,而且这个问题一般适用于非 C++ 语言,而不仅仅是特定语言。
编辑添加:这是针对使用 G++ 约定的 Intel CPU。这应该回答了涉及 ABI 的问题。
至于“extern C”,这不是 C++ 代码。它调用C++代码,但由于它本身不是C++代码,所以使用“extern C”是没有意义的。此外,它调用的 C++ 代码必须按原样使用,而不能添加诸如“extern C”之类的东西。
我正在寻找的不是调用约定的确切正式定义。我只是想尝试一些线索。例如,C++ 编译器将“this”指针放在第一个参数以外的位置有多常见?除了“this”指针之外,还有其他隐藏的参数是多么普遍。如果“this”指针不是第一个,它几乎总是最后一个,还是有时在中间?等等。
【问题讨论】:
-
您需要查看编译 C++ 代码的具体 ABI。
-
没有从其他语言调用 C++ 构造函数的指定方法。对于语言互操作性,坚持使用 C。
-
这是定义的实现。取决于编译器。取决于操作系统。取决于机器架构。没有一种方法可以做到。
-
@n.m.这不是句子所说的。 OP 似乎在说“外部语言不是 C,也不是 C++,因此
extern "C"的建议没有帮助,因为我正在谈论的语言中不存在该设施/语法” -
@LightnessRacesinOrbit 也许你是对的,改写我的回答以消除歧义。无论如何我想删除评论,因为我写了一个扩展版本作为答案。
标签: c++ constructor calling-convention abi