隐藏第三方命名空间是否危险
Is shadowing 3rd party namespaces dangerous?
我经常发现自己处于第三方库可以使用某些当前不存在的功能或实用程序的情况。在编写这些配套实用程序时,会出现将它们放入哪个命名空间的问题。
我选择了一个约定来隐藏我自己的 3rd 方命名空间,但我并不完全说服自己没有潜伏着不必要的影响。
示例实用程序标头:
#include <third_party/Thing.hpp>
namespace my_namespace
{
namespace third_party
{
typedef ::third_party::Thing<int,3> Thing3i
}
}
所以问题是:这样做有什么重大的负面影响吗?
我没有特别看出任何错误,但我要提醒的是,如果出现歧义或膨胀,请不要用第三方命名空间污染您的命名空间,对于这个问题有一个很好的答案,嵌套命名空间是否是一个好主意:C++命名空间建议,C++中的嵌套命名空间和此处命名空间在 c++ 中的用法。
一般来说,它应该是安全的,我会using namespace third_party
使用限制为只有 cpp 文件,否则如果你要在标头中声明using namespace third_party
,那么#include
标头的代码将意外获取第三方命名空间,除非您真的希望发生这种情况。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 聚合初始化的 C++17 扩展是否使大括号初始化变得危险?
- 这个危险指针示例是否因为 ABA 问题而存在缺陷?
- 是否存在与将数据流式传输到 c++ 异常类相关的任何危险
- 在构造器的初始化列表中使用"this"对Qt是否特别危险?
- 混合流和标准是否存在技术危险
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 在这种情况下,使布尔运算符过载是否危险
- 可能同时从不同的线程读取全局变量是否危险
- 优化级别-O3在g++中是否危险
- 矢量自动调整大小在多线程代码中是否是一种危险情况
- 是否危险将 int * 转换为无符号的 int *
- 隐藏第三方命名空间是否危险
- 在UTF-8内部工作,然后仅在Windows中需要时转换为UTF-16,是否存在任何危险
- 通过引用捕获异常是否危险
- 以任何方式将基指针强制转换为派生指针是否危险
- std::reference_wrapper的隐式T&constructor是否会<T>使其使用起来很危险?
- 从安全角度来看,在 Windows 中使用管道是否被认为是危险的