什么是
::std::string
和std::string
之间的区别?
前者是全局的?但是全局是指什么?不是namespace std
是全局的吗?
感谢您的帮助。::std::string
和std::string
之间的区别?
前者是全局的?但是全局是指什么?不是namespace std
是全局的吗?
感谢您的帮助。::std::string
表示全局命名空间中 std
命名空间下的 string
类型。前导符号 ::
强制查找始于全局命名空间。因此,::std::string
总是指 C++ 标准库中的 string
类型。
std::string
表示命名空间 std
中的 string
类型,在当前作用域中查找 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
,就没有必要使用前导::
。这只是好的代码风格。