c++ - 当同一个命名空间中有两个具有相同签名的函数时会发生什么?
问题描述
据我了解,我可以使用命名空间来避免函数相互覆盖。但是如果命名空间有相同的名称呢?
我在下面包含了两个名为 VideoLibrary::check() 的 .h 文件,它可以编译。为什么?这不与命名空间的目的相矛盾吗?
文件 1.h 和文件 2.h:
namespace VideoLibrary
{
void check();
}
文件 1.cpp:
namespace VideoLibrary
{
void check()
{
printf("check1");
}
}
文件 2.cpp:
namespace VideoLibrary
{
void check()
{
printf("check2");
}
}
我担心主要是因为我的项目包含外部库,我担心它包含与我的项目具有相同签名的函数。对于这种情况,如何在编译时得到任何错误?如果重要的话,我会使用 Xcode 作为编辑器。
解决方案
如果您在不同的翻译单元中有相同函数的 2 个(非内联)定义,则您有一个 ODR(一个定义规则)违反 NDR(无诊断要求)。
推荐阅读
- c# - 为什么
在 TabbedPage 中不起作用? - python - 在 PyCharm Professional 中显示 ssh 解释器的保存密码
- gitlab-ci - 在 gitlab-ci 中使用 NVM 安装特定的 nodejs 版本
- javascript - iframe 不遵循重定向
- python - 在Python中循环JSON?
- python - discord.py,RuntimeWarning:启用 tracemalloc 以在发送消息时获取对象分配回溯
- python - 在Python中分隔行的数据框
- karate - 如何验证数组响应包括空手道中另一个数组的值
- javascript - Vue3 渲染一个可扩展的异步组件列表
- typescript - 使用 Typescript 模块扩充添加到合并到类中的命名空间