I was wondering if someone could explain there terms since I encounter them in many places. I know some basic theory about them but not sure what I know is right or wrong.
A qualified name is one that has some sort of indication of where it belongs, e.g. a class specification, namespace specification, etc. An unqualified name is one that isn't qualified.
Read James McNellis' answer here:
What is a nested name specifier?
Given:
struct A {
struct B {
void F();
};
};
A
is an unqualified-id.::A
is a qualified-id but has no nested-name-specifier.A::B
is a qualified-id and A::
is a nested-name-specifier.::A::B
is a qualified-id and A::
is a nested-name-specifier.A::B::F
is a qualified-id and both B::
and A::B::
are nested-name-specifiers.::A::B::F
is a qualified-id and both B::
and A::B::
are nested-name-specifiers.A qualified name is one that specifies a scope.
Consider the following sample program, the references to cout
and endl
are qualified names:
#include <iostream>
int main()
{
std::cout<<"Hello world!"<<std::endl;
return 0;
}
Notice that the use of cout
and endl
began with std::
. These make them Qualified names.
If we brought cout and endl into scope by a using declaration or directive*(such as using namespace std;
), and used just cout
and endl
just by themselves , they would have been unqualified names, because they would lack the std::
.