我需要在头文件和源文件中指定调用约定吗

Fro*_*art 5 c++ visual-c++ language-lawyer

我需要在头文件和源文件中指定调用约定吗?

例如,

头文件.h

void __cdecl Foo();
Run Code Online (Sandbox Code Playgroud)

源代码.cpp

void __cdecl Foo()
{
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 4

不。

来自文档

对于非静态类函数,如果该函数是外行定义的,则不必在外行定义上指定调用约定修饰符。也就是说,对于类非静态成员方法,在定义时假定声明期间指定的调用约定。给定这个类的定义:

struct CMyClass {
   void __cdecl mymethod();
};
Run Code Online (Sandbox Code Playgroud)

void CMyClass::mymethod() { return; }
Run Code Online (Sandbox Code Playgroud)

等价于:

void __cdecl CMyClass::mymethod() { return; }
Run Code Online (Sandbox Code Playgroud)

  • 这不是只适用于成员函数吗?另外,被调用者如何忽略调用约定(如上一段所示)? (5认同)