c++ - C++是否也保留标准库函数名?

标签 c++ function

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

最佳答案

不,命名空间 std 中的函数名称不是保留的 - 至少,在禁止在命名空间 std 之外使用相同名称的意义上不是。

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

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

关于c++ - C++是否也保留标准库函数名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745633/

相关文章:

javascript - 为什么我的函数值被调用了两次?

c++ - 将类回调函数分配给结构?

c++ - 如何在 Linux 上查看(C 和 C++)二进制符号?

c++ - 在一个 vector 中保存具有不同模板参数的类实例,但保留它们的属性

javascript - JSHint 和 JSLint 未捕获未定义的函数

r - is.data.frame(data) object ...在函数上下文中找不到

Postgresql,将 CSV 字符串转换为数组

C++ 欧拉近似

c++ - 如何以几秒的间隔多次使用 QTcpSocket 实例?

C++算术运算符重载——自动加宽?