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