假设您在翻译单元中定义了一个函数,其函数名称与任何标准库函数完全匹配。 由于编译器首先在翻译单元中查找定义,然后在库文件中查找,因此这会导致使用自己版本的函数定义还是会导致诊断?
最佳答案
不,命名空间 std
中的函数名称不是保留的 - 至少,在禁止在命名空间 std
之外使用相同名称的意义上不是。
但是,将名称放在命名空间 std
中(少数情况除外,例如专门化某些模板函数)会产生未定义的行为。
如果编译器在调用您的函数时提示歧义,其中一个函数与您的函数同名但位于命名空间 std
中,则原因可能是 在您的代码中使用命名空间 std
。这样做的效果是,当编译器遇到名称时,您的函数和 namespace std
中的函数都是有效匹配项。如果编译器没有理由偏爱其中一个(例如,它们接受相同类型的参数),则代码将无法编译。在这种情况下,解决方案是从您的代码中删除 using namespace std
- 除了删除它之外,无法撤消 using namespace std
的影响。
关于c++ - C++是否也保留标准库函数名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745633/