【发布时间】:2016-03-06 08:49:49
【问题描述】:
以下 C++ 代码使用 Visual C++ 和 g++ 编译:
struct S
{
static void foo();
};
extern "C"
void S::foo() {}
struct T
{
static void foo();
};
extern "C"
void T::foo() {}
auto main() -> int
{
S().foo();
T().foo();
}
有效吗?
如果它是有效的,因为实现可能在一个单独的翻译单元中,这是否意味着静态成员函数总是具有与 C 函数相同的调用约定(如果不是,它如何不暗示)?
【问题讨论】:
-
有趣...seems to compile,如果我正确理解了this answer 的第 7 点,在这种情况下
extern "C"将被忽略。另外,在cppreference.com 上,提到“当类成员声明和成员函数类型声明出现在“C”语言块中时,它们的链接仍然是“C++””
标签: c++ c member-functions