std::tr1::shared_ptr
将指令用作相应标题std::shared_ptr
中的放置指令是否合法且良好的编程风格?像这样:using
namespace std
{
using tr1::shared_ptr;
}
我知道污染整个命名空间是不好的,但是这种情况呢?有没有隐藏的陷阱?目标编译器是 VS2008,但也需要与更高版本的兼容性。
std::tr1::shared_ptr
将指令用作相应标题std::shared_ptr
中的放置指令是否合法且良好的编程风格?像这样:using
namespace std
{
using tr1::shared_ptr;
}
我知道污染整个命名空间是不好的,但是这种情况呢?有没有隐藏的陷阱?目标编译器是 VS2008,但也需要与更高版本的兼容性。
从技术上讲,标准说如果你这样做,你就进入了未定义行为的领域:
17.6.4.2.1 命名空间标准 [namespace.std]
1 除非另有说明,否则如果 C++ 程序将声明或定义添加到命名空间 std 或命名空间 std 内的命名空间,则 C++ 程序的行为是未定义的。
但在实践中,你很可能会侥幸逃脱。哎呀,甚至 Scott Meyers 在 Effective C++ 3rd Ed 中也提出了一个类似的未定义命名空间别名技巧。(第 54 项,第 268 页)使用 Boost 功能作为缺少tr1
功能的权宜之计。
namespace std { using namespace tr1 = ::boost; }
您的 using 声明也是未定义的行为,但请继续前进。
#define
注意:在你的编译器版本和警告周围用一个大的警告来评论它,#pragma
一旦你升级到一个实际有的编译器/库,std::shared_ptr
确保重新访问那个头文件并删除代码。