C ++是否还保留标准库函数名称?

时间:2016-08-03 13:53:54

标签: c++ function

假设您在翻译单元内定义了一个函数,其函数名称与任何标准库函数完全匹配。 由于编译器首先在转换单元中查找定义,然后在库文件中查找定义,因此这会导致使用自己版本的函数定义还是会导致诊断?

3 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解了这个问题(如果我错了,请纠正我)但是说你有这样的功能:

void sort( // blah blah

或声明标准名称空间using namespace std (which you should not be doing)

当您在翻译单元中调用sort(...)时,编译器会重载定义,在这种情况下,您的函数优先。

但是如果你通过显式定义std命名空间(使用范围解析运算符)来调用标准库函数,那么

std::sort( // blah blah

它将使用std库函数。

答案 1 :(得分:2)

不,名称空间std中的函数名称不会被保留 - 至少,不会禁止在名称空间std之外使用相同的名称。

但是,在名称空间std中放置名称(在少数情况下除外,例如专门化某些模板函数)会产生未定义的行为。

如果您在调用函数时让编译器抱怨歧义,其中一个函数与您的函数名称相同但名称空间为std,则原因可能是using namespace std你的代码。当编译器遇到名称时,其效果是您的函数和名称空间std中的函数都是有效匹配。如果编译器没有理由优先于另一个(例如,它们接受相同类型的参数),则代码将无法编译。在这种情况下,解决方案是从代码中删除using namespace std - 除了删除using namespace std之外,无法撤消LocalDate的影响。

答案 2 :(得分:0)

这就是为什么人们说C ++中的using namespace std;是一种不好的做法。

因为当您使用已在namespace std中定义的相同函数名称导致许多不相关的错误时,函数定义会发生冲突。

阅读此主题以获取更多详细信息: -

Why using namespace std; in C++ is considered a bad practice?