STLPORT:命名空间std {}是什么意思?

时间:2012-02-28 13:13:30

标签: c++ namespaces

在stlport库中,我看到了这段代码:

namespace std { }
namespace __std_alias = std;

1。他们是否试图在第一行中取消标准std命名空间? 2.为什么世界上他们会使用更长的别名来代替原来的名字?

4 个答案:

答案 0 :(得分:8)

您需要命名空间“在范围内”才能声明别名。空namespace std {}通知编译器命名空间存在。然后他们可以为它创建一个别名。

除了创建快捷方式之外,还有创建别名的原因。例如,您可以定义一个宏来“重命名”命名空间 - 考虑#define std STLPORT_std的效果。如果您使用头文件播放正确的订购游戏,则使用别名可以访问原始命名空间。

答案 1 :(得分:3)

  1. 不,这只是确保命名空间的名称在当前范围内可用。您可以随时打开和关闭命名空间,而不会影响命名空间的内容。

  2. 我猜,所以他们可以轻松地将他们的库实现更改为::std以外的命名空间(通过将__std_alias更改为其他别名)。例如,如果您想要将两个实现并排测试,这将非常有用。

答案 2 :(得分:2)

获得编译器错误是相当烦人的,因为std没有这样的命名空间......编译器在想什么?当然它存在!

是的,确实如此,但与库功能一样,必须首先声明它。这就是第一行正在做的事情。

通过重命名__std_alias,它允许它们为命名空间提供新的别名。您可能有一天会决定在自己的代码中执行此操作。

也许您希望在代码中使用shared_ptr,但不希望将代码专用于使用命名空间boost或std。所以你可以创建一个别名,并在boost或std“指向”它。与升级库中的其他功能相同,后来成为标准功能。

这并不会限制您使用此命名空间,因为您可以拥有多个别名,并且您可以有多个指向同一个真实命名空间。

假设我们想要调用我们的智能指针库sml。我们可以做到

namespace sml = boost; // or std

代码中的一个位置和代码中该点的#include <boost/shared_ptr.hpp>(相同的标题)。

我们的代码中的其他任何地方都使用sml::shared_ptr。如果我们从boost切换到std,只需更改一个标题,而不是所有代码。

答案 3 :(得分:0)

除了D.Shawley所说的,前面声明一个名称空间内的类需要相同的语法:

namespace std
{
    template <typename T>
    class vector;
}