har*_*ald 11 c c++ overloading
在混合C/C++项目中,我们需要从C调用C++函数.要调用的函数被重载为三个独立的函数,但是我们可以忽略C语言中的那个,我们只选择一个最合适的函数并坚持使用它.
有两种方法可以做到这一点:(1)编写一个带有extern"C"函数的小型C++包装器,它将调用转发给选定的重载函数,或者(2)用hackish方式声明我们想要调用的一个函数C为外部"C".
问题是,第二种变体是否有任何缺点(除了恶梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为exern"C",我们应该期待C++方面的问题,还是根据标准很好地定义?
Jer*_*fin 18
我相信标准中的语言是专门编写的,只允许一个具有"C"链接的函数,以及任意数量的其他函数与"C++"链接重载相同的名称(§[dcl.link]/6):
最多一个具有特定名称的函数可以具有C语言链接.具有相同函数名称的C语言链接的函数的两个声明(忽略限定它的命名空间名称)出现在不同的命名空间范围内引用相同的函数.具有相同名称的C语言链接的对象的两个声明(忽略限定它的命名空间名称)出现在不同的命名空间范围中引用相同的对象.
该标准显示以下示例:
complex sqrt(complex); // C + + linkage by default
extern "C" {
double sqrt(double); // C linkage
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5349 次 |
| 最近记录: |