函数能否extern "C"
接受或返回特定于 C++ 的数据类型,例如引用、指向成员的指针或非 POD 类(按值)?我在 C++ 标准中找不到任何禁止这样做的内容。从逻辑上讲,我希望标准能说明这一点,因为 C ABI 不一定适合传递此类类型。
我想使用 C 链接的原因与 C 编译器无关。该函数只能从 C++ 代码中调用。我只想从我的动态库中导出未损坏的函数名称。
一个愚蠢的代码示例:
class Foo {
public:
virtual void doit() = 0;
};
class Bar : public Foo {
public:
void doit() { std::cout << "Bar" << std::endl; }
};
extern "C" Foo& getFoo() { static Bar bar; return bar; }
extern "C" Bar getBar() { return Bar(); }
这在 Linux 上使用 GCC 编译,并按预期工作。应该是标准的吗?
该问题是对该问题的评论中讨论的后续讨论。
更新我已经用 Comeau 编译器对此进行了测试,它没有抱怨。