不可思议:using namespace无效!(2)
  gJZEzXHb6nFn 2023年11月02日 30 0



不可思议: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)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

gJZEzXHb6nFn
最新推荐 更多