为什么std模板函数不需要合格?

时间:2013-12-18 01:36:11

标签: c++ templates

当搞乱全局命名空间限定符时,我注意到你实际上不需要std::来模板函数,比如sortaccumulate。因此,如果您有一个与其中一个共享名称的函数,您可以执行::sort之类的操作来消除歧义。但是,我不知道你可以在不说std::的情况下调用这些函数。为什么会这样?

1 个答案:

答案 0 :(得分:4)

至少在一般情况下,你确实需要对它们进行限定。

要了解原因,请创建一个包含7个整数的数组。在指向第一个和第一个结尾的指针上使用sort:它只适用于std::

 int foo[]={4,3,5,3,4,2,1};
 std::sort(&foo[0], &foo[8]); // std:: required to compile

但是,如果参数中的类型来自namespace,则在查找重载时会搜索namespace中的函数。由于您经常使用通常位于std<algorithm> s的迭代器,这使您相信std::一般不需要:实际上您很幸运!