【发布时间】:2012-11-20 10:28:31
【问题描述】:
我正在尝试用 C++ 开发一个动态库,以便由用 IDL(交互式数据语言)编写的现有程序调用。我知道我需要使用 extern "C" 来禁用名称修饰,以便 IDL 可以调用它需要的函数(调用机制的其余部分非常简单)。
但是,我总是对使用我不完全理解的语言的特性犹豫不决,所以我的问题是:如果有的话,我会因为恢复到 C 链接而失去 C++ 的哪些特性?我认为命名空间是显而易见的,但它是否也完全禁用了 C++ 的所有其他不错的功能?我还能使用 C++ STL 以及我所依赖的所有各种语言特性(尤其是 C++11 特性)吗?还是我基本上被困在 C 语言中?
【问题讨论】:
-
看看C++ Name Mangling。您将无法使用
extern "C"进行函数重载。 -
谢谢 :) 但是我还能使用 C++ 的其他特性吗,还是函数中的所有内容都必须是严格的 C?例如,我可以使用“del”、lambdas 或现有 C++ 标准库之类的关键字吗?
-
它(
extern "C"部分下的所有内容)必须严格使用 C,因为它必须与 C 兼容。因此是“extern C” -
“我总是对使用我不完全理解的语言的特性犹豫不决”如果他们不使用他们不完全理解的特性,很少有人能写出很多 C++... ;)