不可思议:using namespace无效!(2)


不可思议:using namespace无效!(2)
C++ namespace与name lookup之惑


不可思议:using namespace无效!(1)


问题是否出在std::sort()里面?为了让问题更清晰,我们把std::sort()原码提出来。
将std::sort()中相关代码提出,生成std::my_sort().

#include <vector>
#include <algorithm>

class testClass
{
};

namespace test
{
bool operator<( const testClass &class1,
const testClass &class2 )

{
return true;
}
};

using namespace test;

namespace std
{
template<typename _RandomAccessIterator>
void mysort(_RandomAccessIterator __first,
_RandomAccessIterator __last)

{
if (*__first < *__last)
;
}
}

main()
{
std::vector<testClass> vec;
mysort(vec.begin(), vec.end());
}

正如所预料的,问题就在小于操作符的使用上。
再简化一点,去除iterator。如下代码问题依旧。

#include <vector>
#include <algorithm>

class testClass
{
};

namespace test
{
bool operator<( const testClass &class1,
const testClass &class2 )

{
return true;
}
};

using namespace test;

namespace std
{
void testCompare(const testClass & t1,
const testClass & t2)

{
if (t1 < t2)
;
}
}

main()
{
testClass t1, t2;
std::testCompare(t1, t2);
}

但是把testCompare()的命名空间改掉,如std001,竟然可以通过了!
testCompare()的namespace是std或是std001会有什么差别呢?
难道编译器对std库有特殊处理?不会。
可能是std namespace中有些声明造成了影响。

好,我们现在不需要std库了,把两个#include删去,
但是保持std::testCompare(),果然通过了。
再include一个stl头文件,又是错误!



待续...

不可思议:using namespace无效!(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值