在C ++中使用extern“C”时我究竟会失去什么?

What exactly do I lose when using extern “C” in C++?

本问题已经有最佳答案,请猛点这里访问。

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

然而,我总是犹豫不决地使用一种我不完全理解的语言的特性,所以我的问题是:如果C++恢复到C链接,我会失去什么特性?我认为命名空间是显而易见的,但是它是否完全禁用C++的所有其他优秀特性呢?我仍然可以使用C++ STL和我所依赖的各种语言特征(特别是C++ 11个)吗?或者我是被困在C语言中?


唯一被删除的是外部可见名称的名称混乱。函数按参数类型和参数计数重载,结果将停止工作。基本上,链接阶段的名称解析会返回到普通的旧C模式(即一个名称-一个条目)。

至于实现的内部结构,可以继续使用标准库和C++ 11其他所有漂亮的特性。只有外部可见实体的名称被extern C更改。