::std::string
和std::string
之间有什么区别
前者是全球性的吗?但全局是什么?不是命名空间std全球?
谢谢你的帮助。
答案 0 :(得分:14)
::std::string
表示全局命名空间中名称空间string
中的std
。前导::
强制查找在全局命名空间中开始。因此::std::string
始终表示C ++标准库中的string
类型。
std::string
表示名称空间string
中的std
,其中std
将在当前范围内查找。因此,如果存在名为std
的类,命名空间或枚举,则名称查找可能会找到std
。
#include <string>
namespace foo {
namespace std {
class string { ... };
namespace bar {
std::string s; // means foo::std::string
::std::string s; // means string from standard library
}
}
}
只要您和您的协作者同意不指定任何内容::
,就不必使用前导std
。这只是一种很好的风格。