目录
1.using namespace 是否是将命名空间转为全局?
1.using namespace 是否是将命名空间转为全局?
首先了解到函数重载的规则是形式参数的个数不同、类型不同、顺序不同
解释:不同命名空间下出现
函数名相同,
参数类型相同,若
参数名称不同,
且using 两个命名空间,
此时,
两者当中的函数依旧在原作用域下,
不是在全局,
所以不构成函数重载的规则,
两者作用域是分开的,
但是如果进行调用则会构成函数的
调用歧义,
编译器不知调那一个,
若不调用则依旧是不会报错的,因为其仍然是不同作用域下的两个相同的函数.
编译器默认的查找规则是局部查找->全局查找
此时using namespace 的含义是使编译器的查找规则增加:局部查找->全局查找->using 的命名空间查找
2.问:返回值不同构成函数重载吗?
有两个函数名相同,参数相同,但返回值不同,一个是int,另一个是void。
例如:int fun(){return 0;} 和void fun(){}
调用时是fun();
所以返回值不同,无法区分,返回值不是重载的条件
3.函数重载顺序不同某种情况
首先,正常的函数重载顺序不同(代码与结果展示)
穿插:隐式类型转换
函数调用歧义
根据上一案例的表现,这一案例则出现了错误,
依旧是
满足函数重载的规则,
但是调用时会出现调用歧义
案例1
函数调用编译器不知道调哪个.
案例2
依旧是调用歧义,此时函数依旧满足函数重载的规则,只是调用出现了歧义。