概念函数重载就是在同一个作用域中定义多个形参列表参数个数 或 类型 或 类型顺序不同而函数名相同的函数在调用函数时根据传入的实参列表就能在多个同名函数中调用最匹配的一个。原理简单来说每一份代码都会在汇编阶段生成一张符号表符号表里面有函数名和函数地址的映射关系。程序运行时通过函数名找到函数地址并执行函数。可以预见的是符号表里面的函数名如果只是函数名那么函数重载不可能实现因为所有重载函数的函数名都是一样的无法区分。c编译器通过在汇编时用形参列表的信息修饰函数名来区分同名不同参的函数在这种情况下形参列表不同函数名相同的函数在符号表中的函数名是不同的可以区分开以此实现函数重载。c语言编译器不会修饰函数名因此c语言不支持函数重载。函数重载的例子以上都是函数重载。函数重载的坑虽然一个是缺省参数一个是正常参数但参数类型个数顺序都一样无法区分不能构成函数重载虽然构成函数重载编译器也不会报错。但是这种重载在调用时可能存在调用歧义比如调用的时候不传参数他们具有重载性能但他们不是重载关系因为x1和x2的作用域并不同using只是把命名空间的内容引入全局作用域但命名空间中函数或变量的实际作用作用域仍然是命名空间
c++--函数重载
概念函数重载就是在同一个作用域中定义多个形参列表参数个数 或 类型 或 类型顺序不同而函数名相同的函数在调用函数时根据传入的实参列表就能在多个同名函数中调用最匹配的一个。原理简单来说每一份代码都会在汇编阶段生成一张符号表符号表里面有函数名和函数地址的映射关系。程序运行时通过函数名找到函数地址并执行函数。可以预见的是符号表里面的函数名如果只是函数名那么函数重载不可能实现因为所有重载函数的函数名都是一样的无法区分。c编译器通过在汇编时用形参列表的信息修饰函数名来区分同名不同参的函数在这种情况下形参列表不同函数名相同的函数在符号表中的函数名是不同的可以区分开以此实现函数重载。c语言编译器不会修饰函数名因此c语言不支持函数重载。函数重载的例子以上都是函数重载。函数重载的坑虽然一个是缺省参数一个是正常参数但参数类型个数顺序都一样无法区分不能构成函数重载虽然构成函数重载编译器也不会报错。但是这种重载在调用时可能存在调用歧义比如调用的时候不传参数他们具有重载性能但他们不是重载关系因为x1和x2的作用域并不同using只是把命名空间的内容引入全局作用域但命名空间中函数或变量的实际作用作用域仍然是命名空间