2017-01-06 8 views

答えて

14

::std::stringは、グローバル名前空間内のstdstringを意味します。先頭の::は、ルックアップをグローバル名前空間で開始させます。したがって、::std::stringは、C++標準ライブラリのstringタイプを意味します。

std::stringは、stdstringを意味します。ここでは、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に名前を付けないことに同意するものとして有力::を使用する必要はありません。それは単なる良いスタイルです。

関連する問題