18

我正在尝试用 C++ 开发一个动态库,以便由用 IDL(交互式数据语言)编写的现有程序调用。我知道我需要使用 extern "C" 来禁用名称修饰,以便 IDL 可以调用它需要的函数(调用机制的其余部分非常简单)。

但是,我总是对使用我不完全理解的语言特性犹豫不决,所以我的问题是:如果有的话,我会因为恢复到 C 链接而失去 C++ 的哪些特性?我认为命名空间是显而易见的,但它是否也完全禁用了 C++ 的所有其他不错的功能?我还能使用 C++ STL 以及我所依赖的所有各种语言特性(尤其是 C++11 特性)吗?还是我基本上被困在 C 语言中?

4

1 回答 1

17

唯一被删除的是外部可见名称的名称修饰。参数类型以及参数计数的函数重载将因此停止工作。本质上,链接阶段的名称解析回到了普通的旧 C 模式(即一个名称 - 一个条目)。

就实现的内部结构而言,您可以继续使用标准库和 C++11 的所有其他不错的功能。只有外部可见实体的名称由 更改extern C

于 2012-12-02T23:27:05.607 回答