首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STLPORT:名称空间std{}是什么意思?

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

Stack Overflow用户
提问于 2012-02-28 21:13:30
回答 4查看 429关注 0票数 7

在stlport库中,我看到了以下代码:

代码语言:javascript
复制
namespace std { }
namespace __std_alias = std;

  1. 他们是否试图使第一行中的标准std命名空间无效?
  2. 他们到底为什么要使用更长的别名来代替原始名称?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-28 21:15:45

在声明别名之前,您需要名称空间“在作用域中”。空的namespace std {}通知编译器该命名空间已存在。然后他们可以为它创建一个别名。

除了创建快捷方式之外,创建别名还有其他原因。例如,您可以定义一个宏来“重命名”名称空间--考虑#define std STLPORT_std的影响。拥有别名允许您访问原始名称空间,前提是您使用头文件进行正确的排序游戏。

票数 8
EN

Stack Overflow用户

发布于 2012-02-28 21:21:27

  1. 否,这只是确保名称空间的名称在当前作用域中可用。您可以在任何时候打开和关闭名称空间,而不会影响名称空间的内容。我猜是
  2. ,所以它们可以很容易地将其库实现更改为位于::std以外的名称空间中(通过将__std_alias更改为其他别名)。例如,如果您想要同时测试两个实现,这将非常有用。
票数 3
EN

Stack Overflow用户

发布于 2012-02-28 21:43:05

得到一个编译器错误是相当烦人的,因为没有像std这样的名称空间...编译器是怎么想的?它当然存在!

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

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

也许您希望在代码中使用shared_ptr,但又不希望将代码专用于使用命名空间boost或std。因此,您可以创建一个别名,并将其“指向”boost或std。boost库中的其他功能也是如此,这些功能后来成为标准。

这并不意味着您必须将此名称空间用于所有内容,因为您可以有多个别名,并且可以有多个别名指向同一个真实的名称空间。

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

代码语言:javascript
复制
namespace sml = boost; // or std

在代码中的一个位置,并从代码中的该点开始#include <boost/shared_ptr.hpp> (相同的标头)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9482571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档