5

std::tr1::shared_ptr将指令用作相应标题std::shared_ptr中的放置指令是否合法且良好的编程风格?像这样:using

namespace std
{
   using tr1::shared_ptr;
}

我知道污染整个命名空间是不好的,但是这种情况呢?有没有隐藏的陷阱?目标编译器是 VS2008,但也需要与更高版本的兼容性。

4

1 回答 1

3

从技术上讲,标准说如果你这样做,你就进入了未定义行为的领域:

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确保重新访问那个头文件并删除代码。

于 2013-05-03T20:36:35.747 回答