::std::string和std::string有什么区别?

8
什么是::std::stringstd::string之间的区别? 前者是全局的?但是全局是指什么?不是namespace std是全局的吗? 感谢您的帮助。
1个回答

14

::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,就没有必要使用前导::。这只是好的代码风格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接