C++函数重载以及extern "C"
来源:互联网 发布:含有数据回归 编辑:程序博客网 时间:2024/06/05 09:08
在相同的作用域,定义同名的函数,但是它们的参数
表必须有所区分,这个的函数构成重载关系。
注:重载与函数的返回类型无关,于形参名字无关,只与
参数的个数、类型、顺序有关。
const修饰的常函数和普通成员函数之间构成重载
不同名字空间中的函数也可以通过名字空间指令/名字空间声明的方式构成重载关系。
2)调用函数时,编译器将根据实参与形参的匹配程序,
自动选择最优的重载版本。
当前的编译器一般规则g++ V4.4.7:
完全匹配>常量转换>升级转换>降级转换(标准转换)> 自定义转换 > 省略号匹配
注意:在以往的编程中尽量实现完全匹配,如果不能进行完全匹配,按上述进行选择。
补充:
char* ==> const char* 常量转换/常量匹配
char ==> int 升级转换
short ==>char 标准转换
3)函数重载原理
(1)C++编译器是通过对函数进行换名,将参数列表信息体现在
最新的底层函数名中,从而实现函数的重载;
(2)C程序可以通过C++编译器换名之后的新函数名调用C++模块
中的函数;
(3)可以通过extern "C"来明确要求C++编译器不要对后面的函数进行换名处理,此时可以满足C程序直接调用C++模块中函数的要求,如果不希望换名的内容比较多,则使用
extern "C"后面的大括号将所有的内容包含起来即可
当然extern "C"会导致函数无法重载;
(4)C++程序调用C模块的函数时,调用的函数名也是会被C++编译器进行换名处理的,因此为了保证调用的顺利,在C++程序中使用extern "C" 后面的大括号将所有被调用的
C模块函数声明包含起来即可;
重点:extern "C"的使用与理解:
1.编译器g++和gcc之间的区别
(1)一种扩展名为.c的文件,gcc会把他当成c程序来处理,而g++会把他当成c++程序处理;
(2)文件扩展名为.cpp,在编译阶段,其实gcc和g++都是相同的,都使用的是gcc来进行处理,但是当进入链接阶段的时候,gcc无法自动链接C++的函数库,要想链接C++函数库,必须手动操作,命令为gcc hello.cpp -lstdc++ -o hello。而g++则会自动链接C++的函数库,为了方便起见,对于.cpp的文件就直接使用g++来进行编译和连接,省去了使用gcc进行编译的阶段,从而使得有些人感觉对于.cpp文件的处理么有gcc什么事儿,其实不然,编译阶段g++还是使用了gcc进行编译。
由于编译器的差异,g++编译器与gcc编译器编译出来的.c文件的函数名不一样,g++编译器会将.c中的函数名进行变换。如果使用了extern "C"在头文件中
修饰了函数声明,修饰的函数在g++编译器编译后函数名不改。
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
C程序main调用 C++程序main调用
----------------------------------------------------------------------------------------------------------------------------------------
C模块中的函数 直接调用 利用extern“C”修饰调用的函数
C++模块中的函数 在C++模块中用extern“C”修饰函数声明 直接调用
详解:http://blog.csdn.net/jiqiren007/article/details/5933599
- C++函数重载以及extern "C"
- 函数重载与Extern "C"
- extern "C" 与函数重载机制
- C++函数重载与extern "C"
- static extern 以及 extern "c"
- 关于extern “C” 对函数重载的影响
- C++基础篇—函数重载与Extern C
- extern "C" c++如何实现函数的重载
- C++函数重载机制及为什么要加extern C
- C++函数重载实现的原理以及为什么在C++中调用C语言编译的函数时要加上extern "C"声明
- C/C++中函数的调用约定(__cdecl, __stdcall)以及extern, extern “C"的详细解释
- C++重载和extern C理解
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- goldengate for sqlserver 日志暴涨的解决办法
- Oracle
- 接口加密《一》:移动应用中,通过在客户端对访问的url进行加密处理来保护服务器上的数据
- 10进制颜色值转为16进制之后
- xapian简介<六>
- C++函数重载以及extern "C"
- HDU 1874 畅通工程续
- 写在sqlserver 2008 数据库登录不上,sa账户无法更改,提示无权限。
- linux之fedora22和windows互访共享文件夹
- Linux下操作文件目录
- Gym 100269G-Garage
- 能使Oracle索引失效的六大限制条件
- Android 通用流行框架大全
- Hbase查询结果分页(PageFilter)