STLPORT:命名空间std{}是什么意思
STLPORT: What does namespace std{} mean?
在stlport库中,我看到了以下代码:
namespace std { }
namespace __std_alias = std;
1.他们是否试图取消第一行中的标准std
命名空间
2.他们为什么要用一个更长的别名来代替原来的名字?
在为其声明别名之前,需要命名空间"in scope"。空的namespace std {}
通知编译器命名空间存在。然后他们可以为它创建一个别名
除了创建快捷方式之外,创建别名也是有原因的。例如,您可以定义一个宏来"重命名"命名空间——考虑#define std STLPORT_std
的影响。使用别名可以访问原始名称空间,前提是使用头文件进行正确的排序游戏。
-
不,这只是确保命名空间的名称在当前作用域中可用。您可以在任何时候打开和关闭名称空间,而不会影响名称空间的内容。
-
我想,这样他们就可以很容易地将其库实现更改为位于
::std
之外的命名空间中(通过将__std_alias
更改为别名)。例如,如果您想同时测试两个实现,这将非常有用。
如果没有std这样的命名空间,那么编译器出现错误会很烦人…编译器在想什么?它当然存在!
是的,确实如此,但与库特性一样,它必须首先声明。这就是第一行正在做的事情。
通过重命名__std_alias,可以为命名空间提供一个新的别名。有一天,您可能会决定在自己的代码中执行此操作。
也许你想在代码中使用shared_ptr,但又不想将代码专用于命名空间boost或std。因此,你可以创建一个别名,并将其"指向"boost或std。boost库中的其他功能后来成为标准功能,也是如此。
这并不意味着你必须对所有事情都使用这个名称空间,因为你可以有多个别名,也可以让多个别名指向同一个真实的名称空间。
假设我们想将我们的智能指针库称为sml。我们可以进行
namespace sml = boost; // or std
在代码中的一个位置,并且从代码中的该点开始CCD_。
在代码的其他地方,我们都使用sml::shared_ptr
。如果我们从boost切换到std,只需更改一个标题,而不是所有代码。
除了D.Shawley所说的,正向声明命名空间内的类需要相同的语法:
namespace std
{
template <typename T>
class vector;
}
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思