Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have seen production code such as

::std::vector<myclass> myvec;

I have no idea what the prepending :: mean however - and why is it used?

For an example see:

C++: Proper way to iterate over STL containers

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
237 views
Welcome To Ask or Share your Answers For Others

1 Answer

This fully qualifies the name, so that only the vector template in the std namespace in the global namespace is used. It basically means:

{global namespace}::std::vector<myclass> myvec;

There can be a difference when you have entities with the same name in different namespaces. For a simple example of when this could matter, consider:

#include <vector>

namespace ns
{
    namespace std
    {
        template <typename T> class vector { };
    }

    void f() 
    { 
        std::vector<int> v1;   // refers to our vector defined above
        ::std::vector<int> v2; // refers to the vector in the Standard Library
    }        
};

Since you aren't allowed to define your own entities in the std namespace, it is guaranteed that ::std::vector will always refer to the Standard Library container. std::vector could possibly refer to something else. .


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...