2017-01-06 5 views

ответ

14

::std::stringstring в пространстве имен std в глобальном пространстве имён. Ведущий :: заставляет поиск искать в глобальном пространстве имен. Поэтому ::std::string всегда означает тип string из стандартной библиотеки C++.

std::string означает в пространстве имен std, где std будут рассмотрены в текущей области string. Поэтому, если есть класс, пространство имен или перечисление с именем 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 не назовешь. Это просто хороший стиль.

Смежные вопросы