__thiscall

Microsoft 专用

在成员函数使用和是默认调用约定 C++ 不使用可变参数的成员函数使用调用约定 __thiscall 。 在 __thiscall下,被调用方清理堆栈,对于 vararg 功能是不可能的。 参数从右向左被推入堆栈,当 this 指针传递注册 ECX 而不是堆栈,在 x86 体系结构。

一个原因使用 __thiscall 在默认情况下成员函数使用 __clrcall 的类。 在这种情况下,可以使用 __thiscall 由本机代码使单个成员函数可调用。

除非另行说明在使用编译 /clr: 纯时,所有功能和函数指针。 __clrcall 。

在 Visual C++ 2005 版之前的版本,因为 thiscall 不是关键字,在中,调用约定 thiscall 在程序无法显式指定。

vararg 成员函数使用调用约定 __cdecl 。 所有函数参数在堆栈在堆栈上次被推送,当 this 指针放置

由于此调用约定仅适用于 C++,无 C 名称修饰模式。

在 Itanium 处理器 (IPF)系列 (ipf) 和 x64 计算机上, __thiscall 由编译器接受并忽略;在 IPF 芯片上,按照约定,参数将传入寄存器。

对非静态类函数,因此,如果函数是定义的未包含联的,调用约定修饰符在该未包含联定义的不必指定。 即类非静态成员方法,在声明中指定的调用约定在定义假定。

示例

// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
   void __thiscall mymethod();
   void __clrcall mymethod2();
};

请参见

参考

参数传递的和命名约定